OpenCV中resize()函数的插值方式对比
在进行图像缩放过程中,opencv中的resize函数是最常用的,其速度相对较快,只需要一行代码即可。此函数中提供5种缩放插值的方法。在下文中将进行对比。
1、resize函数简介
void resize(InputArray src, OutputArray dst, Size dsize, double fx=0, double fy=0, int interpolation=INTER_LINEAR );
参数含义
参数含义:
InputArray src -原图像
OutputArray dst -输出图像
Size dsize -目标图像的大小
double fx=0 -在x轴上的缩放比例
double fy=0 -在y轴上的缩放比例
int interpolation -插值方式,有以下5种方式 INTER_NEAREST -最近邻插值
INTER_LINEAR -双线性插值 (默认使用)
INTER_AREA -区域插值。
INTER_CUBIC -三次样条插值,也叫立方插值(超过4*4像素邻域内的双三次插值)
INTER_LANCZOS4 -Lanczos插值(超过8*8像素邻域的Lanczos插值)
2、算法对比
算法 | INTER_NEAREST | INTER_LINEAR | INTER_CUBIC | INTER_LANCZOS4 | INTER_AREA |
---|---|---|---|---|---|
主要思想 | 用距离采样点最近的像素值最为采样点的灰度值 | 用双线性方式计算采样点周围的4个点,计算其灰度值 | 根据采样点的周围16个像素值的双线性关系以及像素变化率,计算出采样点的灰度值 | 在x,y方向分别对相邻的八个点进行插值,也就是计算加权和,傅立叶变换有关的三角函数的方法 | 使用像素区域关系进行重采样,图像放大时类似于双线性插值,缩放时类似于最近邻插值 |
锯齿现象 | 不可避免 | 可避免 | 可避免 | 可避免 | 可避免 |
周围像素 | 未考虑 | 未考虑 | 已考虑 | 已考虑 | 已考虑 |
速度 | 最快 | 较快 | 一般 | 较慢 | 最慢 |
以上算法的速度统计存在几个问题,具体需要应用者自己重新测试确定,但是此结果基本准确。问题主要有:
- 为考虑图像的分辨率,尤其是INTER_AREA、INTER_CUBIC和INTER_LANCZOS4插值,图像分辨率的大小对其有一定的影响,一般情况INTER_AREA效率低一些;
- 算法运行过程中,opencv内部进行了优化,所以实际时间有些许波动;
- 测试过程中,硬件设备的干扰;
3、总结
如果缩小图像,INTER_AREA插值效果最好,而且可以有效防止产生波纹现象,如果放大图像,通常使用INTER_CUBIC或是INTER_LANCZOS4,此两种方法速度较慢,但效果相对较好。尽管INTER_NEAREST算法相当快,但使其效果大打折扣,一般很少使用。
值得注意的是INTER_LINEAR速度较快,效果一般,其会抑制图像信号中的高频分量(即图像边缘会变模糊)。对于要求不高的场景,可以考虑此算法,但是如果需要最大限度的保留图像中的边缘与其他特征(如角点等),且对程序的效率要求并不是很苛刻,则不建议优先使用此算法。
OpenCV中resize()函数的插值方式对比相关推荐
- 【OpenCV】opencv中的resize函数的插值方式
插值方式 resize 函数的介绍 各种插值方式 INTER_NEAREST,最近邻插值法 INTER_LINEAR,双线性插值法 总结 resize 函数的介绍 无论是通过C++来编写opencv, ...
- opencv中resize函数
opencv中的resize函数有多种用法: 1,图像缩放 opencv帮助文档中对resize函数的介绍: src 输入图 dst 输出图,形态和输入图相同,当dsize不等于0,输出图尺寸会和ds ...
- OpenCV中resize函数五种插值算法的实现过程
最新版OpenCV2.4.7中,cv::resize函数有五种插值算法:最近邻.双线性.双三次.基于像素区域关系.兰索斯插值.下面用for循环代替cv::resize函数来说明其详细的插值实现过程,其 ...
- 关于Opencv中Filter2D函数的补全方式
目录 关于Opencv中Filter2D函数的补全方式 环境 验证 C++举例 Python举例 关于Opencv中Filter2D函数的补全方式 环境 OpenCV3.4.16(C++) openc ...
- OpenCV中flip函数实现
一.flip()函数原型介绍 void cv::flip(InputArray src,OutputArray dst, int flipCode) 各参数含义 src:输入图像. dst:输出图像. ...
- OpenCV中initUndistortRectifyMap函数存在bug原因探究
原文首发于公众号「3D视觉工坊」:OpenCV中initUndistortRectifyMap函数存在bug原因探究. 最近在运行如下一段代码时,生成的mapx和mapy有点异常. 代码片段如下: # ...
- imfilter c语言,opencv中cvFilter2D( ) 函数filter2D()函数与MATLAB中imfilter()函数的差异...
出处: 1:cvFilter2D() 函数为opencv中c语言函数 2:filter2D()函数为opencv中c++函数 3:imfilter()函数为matlab版本函数 计算结果的异同: 2( ...
- Opencv中直方图函数calcHist
Opencv中直方图函数calcHist calcHist函数在Opencv中是极难理解的一个函数,一方面是参数说明晦涩难懂,另一方面,说明书给出的实例也不足以令人完全搞清楚该函数的使用方式.最难理解 ...
- 转载:opencv中imshow函数运行中断的解决办法
OpenCV中 imshow函数运行中断的解决方法 羊和咩咩 2017-03-10 16:00:49 5919 收藏 最后发布:2017-03-10 16:00:49首发:2017-03-10 16: ...
最新文章
- C# - Marshal 学习总结
- 6个信号提醒是时候跳槽了 CIO务必get到
- js字符串replace替换多个_汇总几大python常见字符串处理函数与用法(建议收藏)...
- 流行趋势-立体感和艺术剪纸风海报美妆设计
- 各大公司(Google,Microsoft,Baidu, Microsoft Research Asia etc.)实习生面试题总汇
- python 函数
- 修改navigationbar右侧按钮离屏幕边缘位置
- java简单的数据库查询(SQLServer数据库)
- python爬虫毕业论文大纲参考模板_毕业论文大纲参考模板.docx
- 向PDF写入签名日期
- R语言加载UCI糖尿病数据集、并启动Rattle GUI、调用party包中的ctree函数构建条件推理树模型、Rattle混淆矩阵、使用R自定义编写函数通过混淆矩阵计算特异度、敏感度、PPV、NPV
- 核心路由器市场分析:07回顾以及08展望
- 公考二十四节气考点汇总
- 重庆理工大学计算机转专业,2020年重庆理工大学转专业,大一新生转专业和入学考试...
- 【终结扩散模型】Consistency Models.OpenAI开源新模型代码,一步成图,1秒18张
- 车牌识别分割定位_解析车牌识别系统有什么优势?
- C语言键盘方向键的读入
- java毕业设计项目基于JavaWeb酒店管理系统开发与设计
- html 串行通信接口,一种串行通信接口的级联方法与流程
- 名表依波路borel_borel手表是什么牌子