简介
本文实验是在Ubuntu下基于opencv3.4.6的resize()函数进行图片的大小变换的,主要有两种方式,一种是指定的变换后的图像大小,一种是给出图像放大缩小的比例,lena原图大小为 【512x512】 分别变换为【456x123】,和【512*0.5,512*3】,结果:
【此为原图】
【结果图比较畸形,就不做显示了--】
C++实现代码
之前项目比较急的时候,在设定图像变换大小的时候,总是将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;
}
主要参考
- opencv官方,resize()函数的API说明以及示例:【https://docs.opencv.org/3.4/da/d54/group__imgproc__transform.html#ga47a974309e9102f5f08231edc7e7529d】
- opencv官方,Mat类的API说明(主要查下mat的相关使用):【https://docs.opencv.org/3.4.3/d3/d63/classcv_1_1Mat.html】
- 图片来源,opencv软件包内 【opencv/samples/data】