本文实验是在Ubuntu下基于opencv3.4.6的resize()函数进行图片的大小变换的,主要有两种方式,一种是指定的变换后的图像大小,一种是给出图像放大缩小的比例,lena原图大小为 【512x512】 分别变换为【456x123】,和【512*0.5,512*3】,结果:
【此为原图】
【结果图比较畸形,就不做显示了--】
之前项目比较急的时候,在设定图像变换大小的时候,总是将Size(x,y)漏写成(x,y),一直报错,以及不理解Size(空)的意义,通过输出,发现Size(空)等效与Size类构造一个Size(0,0)。(注意Size第一个S是大写)
#include <opencv2/opencv.hpp> using namespace cv; using namespace std; int main() { Mat src =imread("lena.jpg"); Mat dst_resize; /* void cv::resize ( InputArray src, OutputArray dst, Size dsize, double fx = 0, double fy = 0, int interpolation = INTER_LINEAR dsize 表示输出图片的大小,当为Size(无参数)时,计算方法如下: 𝚍𝚜𝚒𝚣𝚎 = 𝚂𝚒𝚣𝚎(𝚛𝚘𝚞𝚗𝚍(𝚏𝚡*𝚜𝚛𝚌.𝚌𝚘𝚕𝚜), 𝚛𝚘𝚞𝚗𝚍(𝚏𝚢*𝚜𝚛𝚌.𝚛𝚘𝚠𝚜)) ) */ cout<<"src.size: "<<src.size<<endl; //方法一,给出指定的大小,以默认的双线性插值方式 INTER_LINEAR( bilinear interpolation ) // resize(src,dst_resize,Size(123,456)); //最简方式 resize(src,dst_resize,Size(123,456),0,0,INTER_LINEAR); //完整方式加其他插值 cout<<"Size(123,456): "<<Size(123,456)<<endl; cout<<"dst_resize.size: "<<dst_resize.size<<endl; imwrite("dst_resize.jpg",dst_resize); //方法二,需要设置dsize=Size(0,0),后续设置缩放比例 cout<<"Size():"<<Size()<<endl; resize(src,dst_resize,Size(0,0),3,0.5); // cout<<"dst_resize2.size: "<<dst_resize.size<<endl; imwrite("dst_resize2.jpg",dst_resize); return 0; }