opencv中的resize 函数 的理解以及引申[通俗易懂]

一、什么是resize函数:  resize函数opencv中专门用来调整图像大小的函数;  opencv提供五种方法供选择分别是:                   a.最近邻插值——INTER_NEAREST;                   b.线性插值——INTER_LINEAR;(默认值)                   c.区域插值——IN…

大家好,又见面了,我是你们的朋友全栈君。

一、什么是resize 函数:

  resize函数opencv中专门用来调整图像大小的函数;

  opencv 提供五种方法供选择分别是:

                   a.最近邻插值——INTER_NEAREST;

                   b.线性插值   ——INTER_LINEAR;(默认值)

                   c.区域插值   ——INTER_AREA;(利用像素区域关系的重采样插值)

                   d.三次样条插值——INTER_CUBIC(超过4*4像素邻域内的双三次插值)

                   e.Lanczos插值——INTER_LANCZOS4(超过8*8像素邻域的Lanczos插值)

  一般来说要缩小图像用区域插值(INTER_AREA);要放大图像一般用三次样条插值(INTER_CUBIC)或者线性插值(INTER_LINEAR);

二、resize 5类算法的公式:

  以下图来说明假设下图的大小为m*n ,想通过resize 函数把尺度变化为m1*n1;

  a.最近邻插值:

                       opencv中的resize 函数 的理解以及引申[通俗易懂]                      opencv中的resize 函数 的理解以及引申[通俗易懂]

 

  b.线性插值(双线性插值):

            opencv中的resize 函数 的理解以及引申[通俗易懂]

                                                                其中:u v 是相当于放缩后的图像Dst相对于原图像Src中对应位置的小数部分;用的是最近邻插的公式;

 

  c.区域插值:  当放大图像时类似最近邻插值,当缩小图像时候有不同的结果;能有效避免波纹出现;

 

      d.三次样条插值(双三次插值):使用的是4*4邻域的像素双3次插值  从(i-1,j-1)到(i+2,j+2)所有点的插值运算结果公式如下图:

opencv中的resize 函数 的理解以及引申[通俗易懂]

 

          opencv中的resize 函数 的理解以及引申[通俗易懂]

                                                             其中S(x)是对 sin(x*pi)/x  的逼近,为插值核;

  e.Lanczos插值:

opencv中的resize 函数 的理解以及引申[通俗易懂]

                              其中:i,j 为缩放前的位置,水平相位值PH0 、PH1、PH2、PH3,垂直相位值PV0、PV1、PV2、PV3。具体如下图所示

opencv中的resize 函数 的理解以及引申[通俗易懂]

三、函数申明格式:

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

  第一个参数:为输入图像;

  第二个参数:为输出图像;

  第三个参数:输出图像的大小;

  第四个参数:沿着水平轴的缩放系数;

  第五个参数:沿着垂直轴的缩放系数;

  第六个参数:插值方式默认为 INTER_LINEAR  线性插值;

四、具体的实验数据结果:

  选取图像的数据为3*3矩阵[5,3,1,1,1,1,0,1,0];扩大到6*6的矩阵结果图

  opencv中的resize 函数 的理解以及引申[通俗易懂]  opencv中的resize 函数 的理解以及引申[通俗易懂]  opencv中的resize 函数 的理解以及引申[通俗易懂] opencv中的resize 函数 的理解以及引申[通俗易懂]opencv中的resize 函数 的理解以及引申[通俗易懂]opencv中的resize 函数 的理解以及引申[通俗易懂]

  

选取图像的数据为6*6矩阵缩小到3*3矩阵的结果图

  opencv中的resize 函数 的理解以及引申[通俗易懂]  opencv中的resize 函数 的理解以及引申[通俗易懂]  opencv中的resize 函数 的理解以及引申[通俗易懂] opencv中的resize 函数 的理解以及引申[通俗易懂] opencv中的resize 函数 的理解以及引申[通俗易懂]

 

 

opencv中的resize 函数 的理解以及引申[通俗易懂]

 

 

 

 

   结论:对于放大图像来说方法越复杂,求出来的数据效果越好,同样的计算时间也会提高(后面会验算时间),区域插值结果与最近邻插结果一样;

      对于缩小图像来说方法越复杂,求出来的数据效果越好,同样的计算时间也会提高(后面会验算时间),区域插值结果与线性插值结果一样;

 

五、具体图像运算结果

opencv中的resize 函数 的理解以及引申[通俗易懂]

 

 

 

 

    缩小图像用区域插值;放大图像用三次样条插值(速度慢);线性插值(速度快);

六、算法的具体时间测试,用一张400*400的图像进行测试:  单位是 MS  用的clock_t  函数测试  循环100次然后 折算成MS

缩小成200*200像素图像的测试结果

  最近邻插opencv中的resize 函数 的理解以及引申[通俗易懂]   双插线性 opencv中的resize 函数 的理解以及引申[通俗易懂] 区域插值opencv中的resize 函数 的理解以及引申[通俗易懂]  双三插值 opencv中的resize 函数 的理解以及引申[通俗易懂]  LANCZOS4opencv中的resize 函数 的理解以及引申[通俗易懂]

 

 

 

扩大成为 800*800像素图像的测试结果

 

 最近邻插opencv中的resize 函数 的理解以及引申[通俗易懂] 双插线性 opencv中的resize 函数 的理解以及引申[通俗易懂]区域插值opencv中的resize 函数 的理解以及引申[通俗易懂]双三插值 opencv中的resize 函数 的理解以及引申[通俗易懂]LANCZOS4opencv中的resize 函数 的理解以及引申[通俗易懂]

 

 

 

    

 

  

  PS:如果自己计算会发现结果不正确,根源在于图像中心opencv修正过;修正公式为:

opencv中的resize 函数 的理解以及引申[通俗易懂]

 

  

 

 

 

 

 

 

  

 

 

 

 

 

 

 

  

 

转载于:https://www.cnblogs.com/zvmxvm1991/p/7891394.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/129410.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • android sdk platform-tools_android eclipse安装教程

    android sdk platform-tools_android eclipse安装教程 有用的链接(有些需要AndroidNDK) 一、游戏库、开发库 1. ONScripteronAnroidのページhttp://onscripter.sourceforge.jp/android/android.html(注:提供的SDK包的源码不全,需要加上原来ONScripter的源码才行——属于jni/application/Android.mk…

    2022年8月30日
    2
  • 虚拟机安装完linux后怎么使用linux_虚拟机ubuntu安装教程

    虚拟机安装完linux后怎么使用linux_虚拟机ubuntu安装教程本篇文章为本人从零开始学习linux的学习心得,其中包含了部署虚拟环境安装linux系统。其中若有错误之处,请读者积极指出,让本人与读者共同进步。第一章部署虚拟环境安装linux系统及配置网路一、linux简介首先在学习linux系统之前,我觉得应该先了解一下linux的来历和发展历程,会让我们对linux充满好奇心,对后续的学习会有帮助。(搬砖):早在20世纪70年代,…

    2022年10月8日
    3
  • Ubuntu中Anaconda安装opencv3[通俗易懂]

    Ubuntu中Anaconda安装opencv3[通俗易懂]关于如何安装,这篇blog中已经给出了很好的方法:https://blog.csdn.net/isuccess88/article/details/73546835,但由于自前段时间开始换源已经不能解决anaconda的下载速度,因此即使使用此方法也很难进行下去,下载速度太慢了。我特地下载了opencv3的opencv3-3.2.0-py35(链接:https://pan.baidu.com…

    2022年10月19日
    1
  • 常用的css文件_css常用的三种选择器

    常用的css文件_css常用的三种选择器reset.css(几乎每个项目都要引入的css)@charset"utf-8";html{background-color:#fff;color:#000;font-size

    2022年8月1日
    6
  • 三行代码递归实现二叉树层序遍历

    三行代码递归实现二叉树层序遍历简述二叉树的层序遍历网上大部分都是使用队列的出队和入队来实现的,这次我用三行代码递归实现二叉树的层序遍历.层序下图是一个简单的二叉树,层序就是一行一行的往下读取,这个二叉树的层序结果便是:1234567(图画的比较丑,强迫症看着难受,看官忍一下)递归分析要想使用递归,必须有两个条件:函数参数类型相同递归必须有出口在二叉树中找到上面的两个条件,与

    2022年5月21日
    31
  • pycharm误删文件无法恢复_pycharm不小心删除文件怎么恢复

    pycharm误删文件无法恢复_pycharm不小心删除文件怎么恢复

    2022年8月28日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号