opencv_resize( )调整图像大小

将源图像精确地转换为指定尺寸的目标图像。如果源图像中设置了ROI(Region Of Interest ,感兴趣区域),那么resize( )函数会对源图像的ROI区域进行调整图像尺寸的操作,来输出到目标图像中。

缩小图像:1、对图像G_i进行高斯内核卷积 2、将所有偶数行和列去除

放大图像:1、将图像在每个方向扩大为原来的两倍,新增的行和列以0填充

2、使用先前同样的内核(乘以4)与放大后的图像卷积,获得 “新增像素”的近似值

【原型】

C++: void resize(InputArray src,OutputArray dst, Size dsize, double fx=0, double fy=0, int interpolation=INTER_LINEAR )

参数1:InputArray类型的src,输入图像,填Mat类的对象即可。
参数2:OutputArray类型的dst,输出图像,当其非零时,有着dsize的尺寸,或者由src.size()计算出来。
参数3:Size类型的dsize,输出图像的大小;如果它等于零,由下式进行计算: 其中,dsize,fx,fy都不能为0。

参数4:double类型的fx,沿水平轴的缩放系数,有默认值0,且当其等于0时,由下式进行计算:

 参数5:double类型的fy,沿垂直轴的缩放系数,有默认值0,且当其等于0时,由下式进行计算:

 

 参数6:int类型的interpolation,用于指定插值方式,默认为INTER_LINEAR(线性插值)。
 可选的插值方式如下:

  • INTER_NEAREST - 最近邻插值
  • INTER_LINEAR - 线性插值(默认值)
  • INTER_AREA - 区域插值(利用像素区域关系的重采样插值)
  • INTER_CUBIC –三次样条插值(超过4×4像素邻域内的双三次插值)
  • INTER_LANCZOS4 -Lanczos插值(超过8×8像素邻域的Lanczos插值)

若要缩小图像,一般情况下用CV_INTER_AREA来插值

而若要放大图像,一般情况下CV_INTER_LINEAR

【实例】

#include 
#include using namespace cv;int main()
{//载入原始图   Mat srcImage = imread("D:\\study\\picture\\a.jpg"); Mat tmpImage, dstImage1, dstImage2;//临时变量和目标图的定义tmpImage = srcImage;//将原始图赋给临时变量//显示原始图  imshow("【原始图】", srcImage);//进行尺寸调整操作resize(tmpImage, dstImage1, Size(tmpImage.cols / 2, tmpImage.rows / 2), (0, 0), (0, 0), 3);resize(tmpImage, dstImage2, Size(tmpImage.cols * 2, tmpImage.rows * 2), (0, 0), (0, 0), 3);//显示效果图  imshow("【效果图】之一", dstImage1);imshow("【效果图】之二", dstImage2);waitKey(0);return 0;
}

 


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部