转自:https://www.cnblogs.com/dyufei/p/8205121.html

一. 主要函数介绍

1) 图像大小变换 cvResize ()

原型:

voidcvResize(const CvArr* src,CvArr* dst,intinterpolation=CV_INTER_LINEAR
);

说明:

src 表示输入图像。
dst表示输出图像。
intinterpolation插值方法,有以下四种:

CV_INTER_NN - 最近邻插值,
CV_INTER_LINEAR - 双线性插值 (缺省值)
CV_INTER_AREA - 使用象素关系重采样。当图像缩小时候,该方法可以避免波纹出现。当图像放大时,类似于 CV_INTER_NN 方法..
CV_INTER_CUBIC - 立方插值.

2)图像读取 imread()

原型:

python:
cv2.imread(filename[, flags]) → retval
c++:
Mat imread(const string& filename, int flags=1 )

说明:

filename 表示图像的路径和名称(不在工作路径要提供绝对路径,否则读不到也不会报错)
params 表示 的加载方式
python:

cv2.IMREAD_COLOR:读入一副彩色图像。图像的透明度会被忽略, 这是默认参数。
cv2.IMREAD_GRAYSCALE:以灰度模式读入图像

c++:

CV_LOAD_IMAGE_COLOR 彩色
CV_LOAD_IMAGE_GRAYSCALE 灰度

3)图像创建 imwrite()

原型:

python:
cv2.imwrite(filename, image[, params])
c++:
bool imwrite(const string& filename, InputArray image, const vector<int>& params=vector<int>())

说明:

filename 表示写图像的路径和名称(不在工作路径要提供绝对路径)
image 是要保存的图像数据
params 表示 图像保存方式python可以不用提供,但C++必须根据根式设置正确,否则保存不了图片。

注意: C++ 中 imwrite(函数的) params参数 :

参数与保存的图像类型相关,如果参数未指定文件保存不成功,具体根据保存的图像类型具体设置

1)JPEG,参数为CV_IMWRITE_JPEG_QUALITY,它的值是从0到100,值越小压缩的越多,默认值是95.
2)PNG,参数为CV_IMWRITE_PNG_COMPRESSION,它的值是从0到9,值越大表示图片尺寸越小,压缩时间越长。默认值是3。
3)PPM,PGM或者PBM,参数为CV_IMWRITE_PXM_BINARY,它的值是0或者1。默认值是1。

二、实例

python版(python3.5 opencv3.4):

import numpy as np
import cv2 def resizeImage(image,width=None,height=None,inter=cv2.INTER_AREA):
newsize = (width,height)
#获取图像尺寸
(h,w) = image.shape[:2]
if width is None and height is None:
return image
#高度算缩放比例
if width is None:
n = height/float(h)
newsize = (int(n*w),height)
else :
n = width/float(w)
newsize = (width,int(h*n)) # 缩放图像
newimage = cv2.resize(image, newsize, interpolation=inter)
return newimage imageOriginal = cv2.imread("test.jpg")
cv2.imshow("Original", imageOriginal)
#获取图像尺寸
w = width=imageOriginal.shape[1]
h = width=imageOriginal.shape[2]
print ("Image size:",w,h)
#放大2倍
newimage = resizeImage(imageOriginal,w*2,h*2,cv2.INTER_LINEAR)
cv2.imshow("New", newimage)
#保存缩放后的图像
cv2.imwrite('newimage.jpg',newimage)
#缩小5倍
newimage2 = resizeImage(imageOriginal,int(w/5),int(h/5),cv2.INTER_LINEAR)
cv2.imwrite('newimage2.jpg',newimage2)

C++ 版(imageResize.cpp)

#include <iostream>
#include "opencv2/opencv.hpp" using namespace std;
using namespace cv; void imageResize(Mat image, Mat* dst, int width, int height, int inter = CV_INTER_AREA )
{ int w = image.cols;
int h = image.rows;
int newW = width;
int newH = height;
if(width == 0 && height ==0){
return;
}
if(width == 0){
float re = h/(float)height;
newW = (int) w * re;
} else {
float re = w/(float)width;
newH = (int) h * re;;
} resize(image, *dst, Size(newW, newH),inter); } int main()
{
const char* filename = "test.jpg";
Mat image,dst;
//image = imread(filename, CV_LOAD_IMAGE_GRAYSCALE);
image = imread(filename, CV_LOAD_IMAGE_COLOR);
if (image.empty()) {
std::cout<<"Faild open file.";
}
//imshow("image", image);
//image.cols为图像的宽度 image.cols为图像的高度
int w = image.cols;
int h = image.rows;
std::cout<<"Image size:"<<w <<" * "<<h<<std::endl;
imageResize(image,&dst,w * 2, h * 2); std::cout<<"new Image size:"<<dst.cols <<" * "<<dst.rows<<std::endl;
vector<int> compression_params;
//JPEG,参数为CV_IMWRITE_JPEG_QUALITY,值是从0到100,值越小压缩的越多
compression_params.push_back(CV_IMWRITE_JPEG_QUALITY);
compression_params.push_back(100);
//imshow("dstImage", dst);
imwrite("dstImage.jpg",dst,compression_params); return 0;
}

编译:

 sudo g++ imageResize.cpp  -o resize  `pkg-config --cflags --libs opencv

OpenCV - opencv3 图像处理 之 图像缩放( python与c++实现 )的更多相关文章

  1. openCV(三)---图像缩放

    UIImage *img1 = [UIImage imageNamed:@"1448941176867"]; //将UIImage转换为IplImage格式 IplImage *p ...

  2. opencv学习笔记3——图像缩放,翻转和阈值分割

    #图像的缩放操作 #cv.resize(src,dsize,dst=None,,fx=None,fy=None,interpolation=None) #src->原图像,dsize->目 ...

  3. opencv3 图像处理(一)图像缩放( python与c++ 实现)

    opencv3 图像处理 之 图像缩放( python与c++实现 ) 一. 主要函数介绍 1) 图像大小变换 Resize () 原型: void Resize(const CvArr* src,C ...

  4. 【python图像处理】图像的缩放、旋转与翻转

    [python图像处理]图像的缩放.旋转与翻转 图像的几何变换,如缩放.旋转和翻转等,在图像处理中扮演着重要的角色,python中的Image类分别提供了这些操作的接口函数,下面进行逐一介绍. 1.图 ...

  5. 邻近双线性插值图像缩放的Python实现

    最近在查找有关图像缩放之类的算法,因工作中需要用到诸如此类的图像处理算法就在网上了解了一下相关算法,以及其原理,并用Python实现,且亲自验证过,在次与大家分享. 声明:本文代码示例针对的是plan ...

  6. opencv学习笔记——图像缩放函数resize

    opencv提供了一种图像缩放函数 功能:实现对输入图像缩放到指定大小 函数原型: void cv::resize ( InputArray src, OutputArray dst, Size ds ...

  7. OpenCV计算机视觉学习(11)——图像空间几何变换(图像缩放,图像旋转,图像翻转,图像平移,仿射变换,镜像变换)

    如果需要处理的原图及代码,请移步小编的GitHub地址 传送门:请点击我 如果点击有误:https://github.com/LeBron-Jian/ComputerVisionPractice 图像 ...

  8. Python图像处理丨图像腐蚀与图像膨胀

    摘要:本篇文章主要讲解Python调用OpenCV实现图像腐蚀和图像膨胀的算法. 本文分享自华为云社区<[Python图像处理] 八.图像腐蚀与图像膨胀>,作者: eastmount . ...

  9. < python PIL - 批量图像处理 - RGB图像生成灰度图像 >

    < python PIL - 批量图像处理 - RGB图像生成灰度图像 > 直接用python自带的PIL图像库,将一个文件夹下所有jpg/png的RGB图像转换成灰度/黑白图像 from ...

随机推荐

  1. easyPieChart 使用小记

    在使用的时候本来想在获取数据的时候,再放入percent值,但死活不出来进度条条了,只能无奈设置默认100.求教有木正确方式? $("#demo-pie-1").attr(&quo ...

  2. PHP/Yii2操作Cookie,常见问题以及注意事项

    设置Cookie PHP setcookie("name", "Larry",time()+3600 Yii2 $cookies = Yii::$app-> ...

  3. MVC,MVP和MVVM区别

    复杂的软件必须有清晰合理的架构,否则无法开发和维护. MVC(Model-View-Controller)是最常见的软件架构之一,业界有着广泛应用.它本身很容易理解,但是要讲清楚,它与衍生的 MVP ...

  4. git操作整理

    昨天手残 然后在GitHub for windows 上点了revert 然后就给重置了 更手残的是又给同步了 .  但是 GitHub 会保留之前的版本 . 只要删掉本次修改就可. 解决方案:  g ...

  5. 【Tech】POI标签分类

    寒假老板给的任务,让我重现这个实验http://www.liuhaihua.cn/archives/15565.html.自己就随便试了下,用的都是比较经典(lao)的算法和知识,记录一下. 一.从网 ...

  6. FAT和EXFAT文件系统

    文件系统 文件系统是操作系统用于明确磁盘或分区上的文件的方法和数据结构:即在磁盘上组织文件的方法.在移动存储设备上比较常用的有FAT文件系统和ExFAT文件系统. FAT分区依据FAT表中每个簇链的所 ...

  7. Django ORM --- 建表、查询、删除基础

    1.什么是ORM ORM的全称是Object Relational Mapping,即对象关系映射.它的实现思想就是将关系数据库中表的数据映射成为对象,以对象的形式展现,这样开发人员就可以把对数据库的 ...

  8. PHP递归和非递归遍历文件夹下文件

    function readDirFiles($dir){ $files= []; $queue=[realpath($dir)]; $currentPath = current($queue); wh ...

  9. MySQL实习训练1

    [转载]http://www.cnblogs.com/AndrewXu/p/4779648.html 1. 打开cmd,输入,回车 mysql -uroot -p -P3306 -h127. 1)-u ...

  10. 【转载】有向图强连通分量的Tarjan算法

    转载地址:https://www.byvoid.com/blog/scc-tarjan [有向图强连通分量] 在有向图G中,如果两个顶点间至少存在一条路径,称两个顶点强连通(strongly conn ...