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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • G1收集器详解「建议收藏」

    G1收集器详解「建议收藏」CMS垃圾收集器的弊端:会产生内存碎片&&需要预留空间。这两个问题在处理时,很有可能会导致停顿时间过长,即CMS的停顿时间不可预知。所以G1又可以理解为在CMS垃圾收集器上进行了”升级”。G1垃圾收集器可以给你设定一个你希望Stoptheworld停顿时间,G1会根据这个时间尽量满足你。在JVM堆中,堆的内存分布是以物理空间进行隔离——但是在G1垃圾收集器中,堆的划分不再是物理形式,而是以逻辑的形式进行划分。但是,分代的概念在G1中依旧奏效,比如,新对象一般会被分配.

    2022年5月2日
    32
  • java定义byte类型,详解java中的byte类型[通俗易懂]

    java定义byte类型,详解java中的byte类型[通俗易懂]介绍byte,即字节,由8位的二进制组成。在Java中,byte类型的数据是8位带符号的二进制数。在计算机中,8位带符号二进制数的取值范围是[-128,127],所以在Java中,byte类型的取值范围也是[-128,127]。取值范围分析一直在想为什么不是-128到128呢?今天分析了一下这个问题。首先我们得明白一件事情,那就是运算规则:########################…

    2022年6月18日
    29
  • C语言中fprintf_c语言gets函数用法

    C语言中fprintf_c语言gets函数用法c语言中fprintf函数C中的fprintf()函数(fprintf()functioninC)Prototype:原型:intfprintf(FILE*filename,constchar*string,….);Parameters:参数:FILE*filename,constchar*stringetc….

    2022年8月30日
    4
  • linux rzsz安装

    linux rzsz安装

    2021年6月15日
    109
  • cad图例大全_Dote图层

    cad图例大全_Dote图层之前总是想当然的认为,将N个纹理打包成一个图集,那么这个图集只会产生一个DrawCall,如果不打就产生N个DrawCall,后来才发现这并不是决定DrawCall的唯一因素,它还和层级关系有关······这里就会提到渲染的顺序问题,在渲染时默认会按照深度去渲染,也就是会先渲染离摄像机远的物体,后渲染离摄像机近的物体。例如你按顺序渲染三个物体A、B、C,A和C使用相同的材质1,B使用材质2,这…

    2022年9月17日
    2
  • centos安装tomcat「建议收藏」

    centos安装tomcat「建议收藏」一、安装安装jdk:https://www.cnblogs.com/Createsequence/p/11445211.html1上传安装包3启动tomcat二、如果tomcat启动过慢

    2022年8月16日
    7

发表回复

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

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