先来看一下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;
}

输出如下。

opencv2.4.13.7的resize函数使用(c++)的更多相关文章

  1. windows7 64位机上配置支持GPU版(CUDA7.5)的OpenCV2.4.13操作步骤

    很久之前在windows7 32位上配置过GPU版的opencv,可参考http://blog.csdn.net/fengbingchun/article/details/9831837 Window ...

  2. resize函数有五种插值算法

    转自http://blog.csdn.net/fengbingchun/article/details/17335477 最新版OpenCV2.4.7中,cv::resize函数有五种插值算法:最近邻 ...

  3. OpenCV2.4.13+Qt5.6.2配置方法

    [1.环境变量] D:\Soft\OpenCV2\MinGW_build\bin; C:\Qt\Qt5.6.2\Tools\mingw492_32\bin; D:\Soft\Programming\C ...

  4. VS2015上OpenCV-2.4.13安装与Hi35xx .jpg/.bmp格式转.bgr格式开发

    因为Hi3559AV100后期深度学习开发需要用到.bgr格式的图片,而目前在手的一般为.jpg或.bmp格式的图片,下面随笔将给出基于OpenCV-2.4.13的格式转换,实现Hi35xx .jpg ...

  5. OpenCV2.4.13+VS2013开发环境配置

    List1:完成 写在前面:之前电脑很杂乱的装了OpenCV的2个版本,在配置OpenCV和VS2013环境时死活配不好.但是接下来的工作要用到,没有办法,还是得好好做.今天重新装了OpenCV2.4 ...

  6. Ubuntu中Qt5.7.0的安装及opencv2.4.13配置

    去官网下载qt-opensource-linux-x64-5.7.0.run,到"下载"目录 Ctrl+Alt+T打开终端 cd /home/jv/下载sudo mv qt-ope ...

  7. CentOS7配置OpenCV2.4.13

    以管理员身份运行su root输入密码 安装依赖包 yum install gcc gcc-c++ gtk2-devel gimp-devel gimp-devel-tools gimp-help-b ...

  8. ubuntu 14.04 opencv2.4.13 安装

    1.下载然后解压安装压缩包 unzip opencv-2.4.13.zip 2. 进入刚解压的文件夹,建立release文件夹 cd opencv-2.4.13 mkdir release 3. 安装 ...

  9. ubuntu 16.04下安装使用OpenCV2.4.13

    本来项目是在Windows下写的,结果对接的时候发现要在Linux下实现,没办法只能重新移植了.以前在ubuntu上使用过OpenCV,可惜系统已经重新安装过,只能重新来一遍了,索性就记录一下安装过程 ...

随机推荐

  1. stacking过程

    图解stacking原理: 上半部分是用一个基础模型进行5折交叉验证,如:用XGBoost作为基础模型Model1,5折交叉验证就是先拿出四折作为training data,另外一折作为testing ...

  2. linux 后台执行nohup 命令,终端断开无影响

    nohup /root/start.sh & 在shell中回车后提示: [~]$ appending output to nohup.out原程序的的标准输出被自动改向到当前目录下的nohu ...

  3. FastDFS分布文件系统Java客户端集成

    参考博客:http://blog.csdn.net/xyang81/article/details/52847311 官网Java客户端源代码: https://github.com/happyfis ...

  4. 个人理解的int数组和char数组

    char数组中不论是一维还是二维的,在程序执行时每一块的分离依据都是以提供的起始地址到'\0'为一个处理的字符串.所以关于char[]的函数都是只提供相应起始地址作为形参就可以. char[]互相交换 ...

  5. (spfa) Highway Project (zoj 3946 )

    http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=5718   Highway Project Time Limit: 2 Seco ...

  6. (线段树 区间运算求点)Flowers -- hdu -- 4325

    http://acm.hdu.edu.cn/showproblem.php?pid=4325 Flowers Time Limit: 4000/2000 MS (Java/Others)    Mem ...

  7. 关于自定义脚本rc.local里开机不启动的问题--以tomcat和perl相关的脚本为例

    本文将自己遇到的一些自定义脚本加入开机启动项却不成功的问题加以说明,花费了我很长时间才得以解决,当然也多谢了自己朋友的帮忙,正是因为他们的提醒,最后才找到了解决的办法,谢谢他们!!!! 系统是cent ...

  8. 将电脑信息上传到中国移动ONENET平台

    用两个小时做的 可以用在服务器远程运维等环境非常方便 需要源码的可以联系NBDX123

  9. hdu 4882 比赛罚时贪心

    http://acm.hdu.edu.cn/showproblem.php?pid=4882 就是CF的比赛,根据时间的推迟会相应的扣掉题目的分数,每个任务有e,k,e表示完成需要时间,k表示完成后消 ...

  10. Javascript 对象创建多种方式 原型链

    一.对象创建 1.new Object 方式 直接赋上属性和方法 var obj = new Object(); obj.name = '娃娃'; obj.showName = function(){ ...