OPENCV入门教程八:resize改变图像尺寸

时间:2024-10-13 05:04:19

1、函数原型:void resi所鼙艘疯ze(InputArray src, OutputArray dst, Size dsize, double fx=0, 颊俄岿髭double fy=0, int interpolation=INTER_LINEAR )src源图像dst目标图像dsize目标图像的大小各个参数的意义比较直观,但是需要注意的是dsize与fx和fy必须不能同时为零,也就是说要么dsize不为零而fx与fy同时可以为0,要么dsize为0而fx与fy不同时为0;resize函数的目标大小可以是任意的大小,可以不保持长宽比率,删除的像素或者新增的像素值通过interpolation(内插)控制;fx,fy分别指水平和垂直方向的比率;如果dsize 为零,则目标图像的大小是通过这两个参数来计算的:目标图像的宽度为原图像的宽度*fx,同理目标图像的高度为原图像的高度*fy;如果dsize不为零,fx,fy会自动计算:fx=dsize.width/src.cols;fy=dsize.height/src.rows;因此dsize和(fx,fy)只需设置其中一个,另外一个置为零就可以了。interpolation取值:INTER_NN - 最近邻插值。INTER_LINEAR - 双线性插值 (缺省使用)。INTER_AREA - 使用象素关系重采样。当图像缩小时候,该方法可以避免波纹出现。当图像放大时,类似于 INTER_NN 方法。INTER_CUBIC - 立方插值。

OPENCV入门教程八:resize改变图像尺寸

2、打开VS2015选择文件,然后新建项目,选择新建一个Win32控制台应用程序,并选择空项目并在源文件中添加一个名为resize的CPP文件

OPENCV入门教程八:resize改变图像尺寸
OPENCV入门教程八:resize改变图像尺寸

3、在该resize.cpp文件中输入一下代码#include "cv.h&孥恶膈茯quot; // Op髫潋啜缅enCV 文件头#include "highgui.h"#include "cvaux.h"#include "cxcore.h"#include "opencv2/opencv.hpp"#include "opencv2/imgproc.hpp"#include <iostream>#include <string>using namespace cv;using namespace std;int main(int argc, char *argv[]){ string imageName("C:\\Users\\lidabao\\Desktop\\Lena.bmp"); // 图片在电脑中的绝对地址 Mat src_img = imread(imageName.c_str(), IMREAD_COLOR);//读入图片数据 if (src_img.empty()) return -1; namedWindow("image", CV_WINDOW_AUTOSIZE | CV_WINDOW_FREERATIO); imshow("image", src_img); Mat dst_img1; Mat dst_img2(src_img.rows*0.5, src_img.cols*2.0, src_img.type()); // 双线性插值 resize(src_img, dst_img1, Size(), 0.5, 0.5); // 立方插值 resize(src_img, dst_img2, dst_img2.size(), INTER_CUBIC); namedWindow("resize image1", CV_WINDOW_AUTOSIZE | CV_WINDOW_FREERATIO); namedWindow("resize image2", CV_WINDOW_AUTOSIZE | CV_WINDOW_FREERATIO); imshow("resize image1", dst_img1); imshow("resize image2", dst_img2); waitKey(0);}

OPENCV入门教程八:resize改变图像尺寸

4、双线性插值,运行结果:可以看到图像的长和宽都缩短了一半

OPENCV入门教程八:resize改变图像尺寸

5、立方插值,运行结果,可以看到图像的长扩大了2倍,宽缩短了一半

OPENCV入门教程八:resize改变图像尺寸
© 手抄报圈