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


相关推荐

  • Java 常用限流算法解析

    Java 常用限流算法解析前言限流作为高并发场景下抵挡流量洪峰 保护后端服务不被冲垮的一种有效手段 比如大家熟知的限流组件 guawa springcloud 中的 Hystrix 以及 springcloud alibaba 生态中的 Sentinel 甚至是基于网关的限流 比如在 nginx 中配置限流策略 在 gateway 中配置限流策略等限流无处不在 既然限流的作用如此强大 那么其底层的实现原理如何呢 说到底 限流的核心是由一系列不同的算法完成 本篇将通过实例来说明下常用的几种限流算法的用法和原理 1 计数器算法计数器算法限流是采用简单

    2025年6月3日
    2
  • Spring项目启动错误处理方式

    Spring项目启动错误处理方式

    2021年8月23日
    52
  • HPPTS如何保证通信双方的安全性

    HPPTS如何保证通信双方的安全性HTTPS原理和通信流程-知乎

    2022年10月2日
    2
  • 史上最全ASCII码对照表0-255(%d)

    史上最全ASCII码对照表0-255(%d)十进制代码 十六进制代码 MCS字符或缩写 DEC多国字符名 ASCII控制字符1 0 0 NUL 空字符 1 1 SOH 标…

    2022年6月24日
    55
  • SQL数据库数据类型_数据表的常见数据类型有哪些

    SQL数据库数据类型_数据表的常见数据类型有哪些文章目录1. 整数型● bigint(大整数)● int(整数)● smallint(短整数)● tinyint(微短整数)2. 精确数值型numeric | decimal(p[,s])3. 浮点型● real● float[(n)]4. 货币型●money● smallmoney5. 位型6. 字符型●char[(n)]●varchar[(n)]7. Unicode字符型● nchar[(n)…

    2022年8月18日
    6
  • jsp调用getParameterValues获取表单信息

    jsp调用getParameterValues获取表单信息1.新建一个DynamicWebProject项目,里面新建两个jsp文件,整体的结构如下所示:2.one.jsp文件里面的代码如下所示:<%@pagelanguage="java"contentType="text/html;charset=UTF-8" pageEncoding="UTF-8"%>example 选择你去过的城市:

    2022年7月22日
    13

发表回复

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

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