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;
}
输出如下。

opencv2.4.13.7的resize函数使用(c++)的更多相关文章
- windows7 64位机上配置支持GPU版(CUDA7.5)的OpenCV2.4.13操作步骤
很久之前在windows7 32位上配置过GPU版的opencv,可参考http://blog.csdn.net/fengbingchun/article/details/9831837 Window ...
- resize函数有五种插值算法
转自http://blog.csdn.net/fengbingchun/article/details/17335477 最新版OpenCV2.4.7中,cv::resize函数有五种插值算法:最近邻 ...
- 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 ...
- VS2015上OpenCV-2.4.13安装与Hi35xx .jpg/.bmp格式转.bgr格式开发
因为Hi3559AV100后期深度学习开发需要用到.bgr格式的图片,而目前在手的一般为.jpg或.bmp格式的图片,下面随笔将给出基于OpenCV-2.4.13的格式转换,实现Hi35xx .jpg ...
- OpenCV2.4.13+VS2013开发环境配置
List1:完成 写在前面:之前电脑很杂乱的装了OpenCV的2个版本,在配置OpenCV和VS2013环境时死活配不好.但是接下来的工作要用到,没有办法,还是得好好做.今天重新装了OpenCV2.4 ...
- 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 ...
- CentOS7配置OpenCV2.4.13
以管理员身份运行su root输入密码 安装依赖包 yum install gcc gcc-c++ gtk2-devel gimp-devel gimp-devel-tools gimp-help-b ...
- ubuntu 14.04 opencv2.4.13 安装
1.下载然后解压安装压缩包 unzip opencv-2.4.13.zip 2. 进入刚解压的文件夹,建立release文件夹 cd opencv-2.4.13 mkdir release 3. 安装 ...
- ubuntu 16.04下安装使用OpenCV2.4.13
本来项目是在Windows下写的,结果对接的时候发现要在Linux下实现,没办法只能重新移植了.以前在ubuntu上使用过OpenCV,可惜系统已经重新安装过,只能重新来一遍了,索性就记录一下安装过程 ...
随机推荐
- HMM(隐马尔可夫模型)不断学习中
HMM(隐马尔可夫模型)是用来描述隐含未知参数的统计模型,举一个经典的例子:一个东京的朋友每天根据天气{下雨,天晴}决定当天的活动{公园散步,购物,清理房间}中的一种,我每天只能在twitter上看到 ...
- extern声明全局变量用法
在类之外声明一个成员变量,如: a.h CString name; class a{ }; a.cpp extern CString name; 然后就可以用name这个成员变量了. b.cpp ex ...
- 查阅Springboot官方文档方式----------------Springboot2.0.2最新稳定版
1.登录官方网址: https://spring.io/ 如图所示: 2.选择PROJECTS,就可以看到spring所有的相关项目了. 点开后:其中就包括了Spingboot 3.版本选择,红圈部分 ...
- 学以致用四----centos7.2 安装python3.6
基础配置弄好后,开始搭建环境 本次的目的是安装 python 3.6 一.安装相关的依赖包 在之前的博客里有安装python3.6的步骤,为了避免做重复的步骤.需事先准备好依赖包 yum instal ...
- [转]深入理解mysqldump原理
本文转至:http://blog.csdn.net/cug_jiang126com/article/details/49824471 在mysqldump过程中,之前其实一直不是很理解为什么加了--s ...
- 工作总结(二):Web Design
PHP框架:CakePHP 前端框架:Bootstrap Payment Data Transfer:https://developer.paypal.com/docs/classic/paypal- ...
- 返回结点值为e的二叉树指针
题意为,如果二叉树某结点的值为e(假定是整型二叉树),返回这个结点的指针.初看这道题,联想到二叉树可以很简单的遍历,直接返回这个指针不就行了吗?如下图所示,假如要返回值为3的结点指针: 设计好了一个函 ...
- spring的bean在什么时候被实例化
Spring什么时候实例化bean,首先要分2种情况 第一:如果你使用BeanFactory作为Spring Bean的工厂类,则所有的bean都是在第一次使用该Bean的时候实例化 第二:如 ...
- 《it项目管理那些事》学习笔记
此书适合:计算及相关专业的学生,想成为测试工程师.软件工程师.进入项目经理的人,或者经验丰富的it经理人. 之所以称为学习笔记,是加上我从百度搜到一些在看书过程中不明白的it语,作为菜鸟的我,得多看看 ...
- 第87讲:scala中使用For表达式做查询
今天我们来学习下如何用for表达式在scala中做查询. 先来看看示例代码 case class Book(title:String,authors:List[String]) object text ...