//cvResize函数原型
void cvResize( const CvArr* src, CvArr* dst, int interpolation=CV_INTER_LINEAR );
src:输入图像.(IplImage)
dst:输出图像.(IplImage)
interpolation:差值方法:
CV_INTER_NN - 最近邻差值
CV_INTER_LINEAR - 双线性差值 (缺省使用)
CV_INTER_AREA - 使用象素关系重采样。当图像缩小时候,该方法可以避免波纹出现。当图像放大时,类似于 CV_INTER_NN 方法
CV_INTER_CUBIC - 立方差值
函数cvResize 将图像 src 改变尺寸得到与 dst 同样大小。若设定ROI,函数将按常规支持 ROI.
使用C++编程时使用resize函数进行图像缩放
//resize函原型
CV_EXPORTS_W void resize( InputArray src, OutputArray dst, Size dsize, double fx=0, double fy=0, int interpolation=INTER_LINEAR );
注:dsize与(fx,fy)不能同时为0
示例程序:
使用ubuntu14.04+OpenCV 3.1.0
/**------------------------------------------------------------------**/ /**描述:包含程序所依赖的头文件**/ /**------------------------------------------------------------------**/ #include <opencv2/opencv.hpp> #include <opencv2/highgui/highgui.hpp> #include <opencv2/imgproc/imgproc.hpp> #include <string> /**------------------------------------------------------------------**/ /**描述:程序所用的命名空间**/ /**------------------------------------------------------------------**/ using namespace cv; using namespace std; /**------------------------------------------------------------------**/ /**描述:系统全局常量**/ /**------------------------------------------------------------------**/ //目标图片的文件名,需要放置在工程目录下 const string TagrImg = "Angelababy.jpeg"; //定义窗口标题 const char SrcWinNa[] = "SrcWindow"; const char GryWinNa[] = "GryWindow"; const char ResWinNa[] = "ResWindow"; /**------------------------------------------------------------------**/ /**描述:系统全局变量**/ /**------------------------------------------------------------------**/ //放缩倍数 double scale=0.4; int main(int argc, char **argv) { /**原图像的读取及显示-----------------------------------------------**/ //读取图片 Mat SrcImg = imread(TagrImg); //检查是否读取成功 if(!SrcImg.data) { cout<<"读取失败,程序流产"<<endl; cout<<"请检查工程目录下是否存在"<<TagrImg<<endl; return -1; } //创建窗口显示原图像 cvNamedWindow(SrcWinNa, CV_WINDOW_AUTOSIZE); imshow(SrcWinNa, SrcImg); /**图片缩放及显示--------------------------------------------------**/ //设置缩放后的图片的尺寸 Size ResImgSiz = Size(SrcImg.cols*scale, SrcImg.rows*scale); Mat ResImg = Mat(ResImgSiz, SrcImg.type()); resize(SrcImg, ResImg, ResImgSiz, CV_INTER_CUBIC); //创建窗口用于显示缩放后的图像 cvNamedWindow(ResWinNa, CV_WINDOW_AUTOSIZE); imshow(ResWinNa, ResImg); cvWaitKey(0); return 1; }
将图片缩小到0.5倍的效果图: