OpenCV学习(42)

图像处理(5):图像金字塔与图片尺寸缩放

五,尺寸调整:resize()函数

        resize()为 OpenCV中专门用来调整图像大小的函数。
        此函数将源图像精确地转换为指定尺寸的目标图像。如果源图像中设置了ROI (Region Of Interest ,感兴趣区域),那么resize()函数会对源图像的ROI区域进行调整图像尺寸的操作,来输出到目标图像中。若目标图像中已经设置了ROI区域,不难理解resize()将会对源图像进行尺寸调整并填充到目标图像的ROI中。
        很多时候,我们并不用考虑第二个参数 dst 的初始图像尺寸和类型(即直接定义一个Mat类型,不用对其初始化),因为其尺寸和类型可以由 src、dsize、fx和fy这几个参数来确定。
       看一下它的函数原型:
     
   (1)第一个参数,InputArray类型的src,输入图像,即源图像,填Mat类的对象即可。
   (2)第二个参数,OutputArray类型的dst,输出图像,当其非零时,有着dsize(第三个参数)的尺寸,或者由src.size()计算出来。
   (3)第三个参数,Size类型的dsize,输出图像的大小。如果它等于零,由下式进行计算:
                                  dsize=Size(round(fx*src.cols),round(fy*src.rows))
   其中,dsize、fx、fy都不能为0。
   (4)第四个参数,double类型的 fx,沿水平轴的缩放系数,有默认值0,且当其等于0时,由下式进行计算:
                                               (double)dsize.width/src.cols
   (5)第五个参数,double类型的fy,沿垂直轴的缩放系数,有默认值0,且当其等于0时,由下式进行计算:
                                               (double)dsize.height/src.rows
   (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_CUBIC(效率不高,慢,不推荐使用)或cV_INTER_LINEAR(效率较高,速度较快,推荐使用)。


    当进行6次图像缩小接着6次图像放大操作后,两种不同的插值方式得到的效果图如图6.60、图6.61所示。

 

      效果很明显,第一张全是一个个的像素,非常影响美观。另外一张却有雾化的朦胧美感,所以插值方式的选择,对经过多次放大缩小的图片最终得到的效果是有很大影响的。
   接着我们来看两种resize的调用范例。

 接着我们看看完整的示例程序。

原代码:
 

#include <opencv2/opencv.hpp>
#include<opencv2/core/core.hpp>
#include"opencv2/highgui/highgui.hpp"
#include<opencv2/imgproc/imgproc.hpp>
#include<iostream>
#include<time.h>
using namespace std;
using namespace cv;


int main(int argc, char** argv)
{
	Mat srcImage = imread("E:/pictures/2.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;
}


 运行截图:

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值