• opencv2.4.13.7的resize函数使用(c++)


    先来看一下resize函数的原型,如下。

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

    输入是要改变的图,输出是改变后的图片。

    通常使用时,像笔者都是计算好输出图片的尺寸,然后直接在dsize里面设置。比如输入图片是1280*960分辨率的,输出图片要设置为640*480,那么dsize就是Size(640,480)。

    设置尺寸也可以不用dsize,而是使用fx和fy。fx和fy这两个参数分别表示x方向和y方向的resize比例。

    我们要不设置dsize,要不设置fx和fy,不可以两个同时都为0。

    输出图片的类型和尺寸不由输入图片dst这个变量来决定,而是,类型保持跟src的类型一致,尺寸由输入图片src的尺寸和dsize(或者fx和fx)共同决定。

    参数类型有五种,具体可以参考opencv官方文档,默认的是双线性插值。

    下面说下笔者犯的一个错误,可以给同学们借鉴下。

    笔者想把一个(4,4)的矩阵缩放到(2,2),想采用最近邻插值法,而不是默认的双线性插值。

    代码如下。(错误代码)

    int main()
    {
    	Mat a(4, 4, CV_32F);
    	int count = 0;
    	for (int i = 0; i < 4; i++)
    	{
    		for (int j = 0; j < 4; j++)
    		{
    			a.at<float>(i, j) = count;
    			count++;
    		}
    	}
    	Mat dst;
    	resize(a, dst, Size(2, 2), INTER_NEAREST);
    	cout << a << endl;
    	cout << dst << endl;
    	return 0;
    }
    

    上述代码在resize的时候,选用了INTER-NEAREST,但是输出结果却如下所示。

    这就有点奇怪了,这是双线性插值的结果,不应该是最近邻插值的结果。

    后来看到resize函数的声明,才突然明白过来。

    resize函数的声明在hpp里面如下。

    CV_EXPORTS_W void resize( InputArray src, OutputArray dst,
                              Size dsize, double fx = 0, double fy = 0,
                              int interpolation = INTER_LINEAR );
    

    大家发现没有,后面的fx、fy和interpolation都有默认值,假如按照笔者上面代码的写法,其实我输入的INTER_NEAREST对应的是fx,而不是interpolation。

    所以改成下面这种方法就可以了,resize的输出就对了。

    int main()
    {
    	Mat a(4, 4, CV_32F);
    	int count = 0;
    	for (int i = 0; i < 4; i++)
    	{
    		for (int j = 0; j < 4; j++)
    		{
    			a.at<float>(i, j) = count;
    			count++;
    		}
    	}
    	Mat dst;
    	resize(a, dst, Size(2, 2), 0, 0, INTER_NEAREST);
    	cout << a << endl;
    	cout << dst << endl;
    	return 0;
    }
    

    输出如下。

  • 相关阅读:
    Mac sublime text4 修改选中行背景色
    转|java反射方法和使用详解
    浅析Java8中default关键字
    HashMap知识点梳理、常见面试题和源码分析
    100道运维常见面试题
    Python遇到的问题和解决方法汇总
    Git分支管理规范
    29个运维经典面试题
    运维必备技能
    PMP:挣值管理(PV、EV、AC、SV、CV、SPI、CPI)的记忆方法
  • 原文地址:https://www.cnblogs.com/chenjx85/p/10754412.html
Copyright © 2020-2023  润新知