OpenCV实现了用于创建图像金字塔的两个函数pyrDown()和pryUp()。

图像金字塔是一种经典的图像多尺寸描述方法,它将降采样和平滑滤波结合在一起,对图像进行多尺度表示。图像金字塔由不同尺寸的图像叠加而成,通常每一层的尺寸都是上一层的一半。通常用于高效的图像分析,这种处理技术的意义在于:我们在对图像进行处理时,大多是要着眼于图像中有意义的部分,而同一幅图像中可能含有不同尺度下“有意义”的信息,为了充分利用这些图像信息,就需要对图像进行多尺度描述了。

函数1:pyrDown()

函数原型:

void pyrDown(InputArray src, OutputArray dst, const Size& dstsize=Size());

函数作用:

先对图像进行高斯平滑,然后再进行降采样(将图像尺寸行和列方向缩减一半);

函数说明:

需要说明一下的是第三个参数

const Size& dstsize=Size()

这个参数指的是降采样之后的目标图像的大小,我们可以看出它是有默认值的,如果我们调用函数的时候不指定第三个参数,那么这个值是按照 Size((src.cols+1)/2, (src.rows+1)/2) 计算的。而且不管你自己如何指定这个参数,一定必须保证满足以下关系式:

|dstsize.width * 2 - src.cols| ≤ 2;

|dstsize.height * 2 - src.rows| ≤ 2;

也就是说降采样的意思其实是把图像的尺寸缩减一半,行和列同时缩减一半。所以你指定的大小,无非就是多一行少一列的区别而已。在大多数情况下使用默认值就可了,因为这个函数不是缩减图像至任意尺寸,就只是缩减一半,所以没必要搞得那么复杂。

这个缩减的过程是这样的,隔行隔列删去图像中的对应行和列!由此我们也可以看出,这样缩减会带来的影响就是:原图中那些精细的细节边缘等地方,会因此变得锯齿状,产生失真,因此为了缩小之后图像看起来自然,必须进行平滑,这也就是这个算法为什么在降采样之前先对图像进行了高斯模糊的原因。高斯平滑采用的是下面的计算kernel:

函数2:pyrUp()函数

函数原型:

void pyrUp(InputArray src, OutputArray dst, const Size& dstsize=Size());

函数作用:

先对图像进行升采样(将图像尺寸行和列方向增大一倍),然后再进行高斯平滑;

函数说明:

同样是最后一个参数,在默认的情况下,这个尺寸大小是按照 Size(src.cols*2, (src.rows*2) 来计算的。如果你自己要指定大小,那么一定要满足下面的条件:

|dstsize.width - src.cols * 2| ≤ (dstsize.width mod 2);  //如果width是偶数,那么必须dstsize.width是src.cols的2倍;

|dstsize.height - src.rows * 2| ≤ (dstsize.height mod 2);

然后这个函数运行的过程就是先将图像的尺寸行和列方向都放大一倍,然后进行高斯平滑,不过此时高斯平滑的kernel是上面pyrDown()中的kernel乘上4,而不是完全相同。( 其实也很容易理解,行和列方向各放大一倍的结果就是图像的面积放大四倍,所以这里给之前的kernel乘以4)。

OpenCV笔记:pyrDown()函数和pryUp()函数的使用相关推荐

  1. OpenCV学习笔记(三十六)——Kalman滤波做运动目标跟踪 OpenCV学习笔记(三十七)——实用函数、系统函数、宏core OpenCV学习笔记(三十八)——显示当前FPS OpenC

    OpenCV学习笔记(三十六)--Kalman滤波做运动目标跟踪 kalman滤波大家都很熟悉,其基本思想就是先不考虑输入信号和观测噪声的影响,得到状态变量和输出信号的估计值,再用输出信号的估计误差加 ...

  2. OpenCV学习笔记(5)_ ellipse绘制函数浅析

    OpenCV学习笔记(5)_ ellipse绘制函数浅析 文章目录 OpenCV学习笔记(5)_ ellipse绘制函数浅析 1. ellipse第一种重载--绘制椭圆弧 1.1 函数原型 1.2 参 ...

  3. OpenCV 笔记(09)— 常用的数据结构和函数(Vec、Point、Scalar、Size、Rect、cvtColor)

    1. Vec 对象类型 Vec 是一个主要用于数值向量的模板类.我们可以定义向量的类型和组件的数量: Vec<double, 19> myVector 我们还可以使用任何的预定义类型: t ...

  4. OpenCV学习笔记(12):waitKey函数与Sleep函数的不同

    1 前言 2 waitKey函数与Sleep函数 3 时间刷新程序 1 前言 初学OpenCV的时候,会学到一个waitKey 函数,用来做图片显示延时.最近在做一个Qt&OpenCV的项目, ...

  5. OpenCV笔记一:imread函数

    imread函数 imread函数作用 imread函数的作用非常简单,从函数的名称也可以看出来,imread为image read的缩写,即图像读取的意思,.那么imread函数的作用就很明显了,负 ...

  6. OpenCV笔记11——cvRound()、cvFloor()、 cvCeil()函数讲解

    功能:cvRound(), cvFloor(), cvCeil()函数讲解. 函数cvRound,cvFloor,cvCeil 都是用一种舍入的方法将输入浮点数转换成整数: cvRound():返回跟 ...

  7. opencv 简单、常用的图像处理函数(2)

    1.vc++配置opencv 2.简单常用的图片处理函数 3.图像修复函数 opencv的项目以来配置和环境变量的配置都很简单,对于我这个没有c++基础的来说,复杂的是opencv的api和一些大部分 ...

  8. 详解OpenCV的椭圆曲线点坐标近似计算函数ellipse2Poly()

    详解OpenCV的椭圆曲线点坐标近似计算函数ellipse2Poly() 函数ellipse2Poly()可用于近似计算椭圆曲线的像素坐标. 而前面介绍过的函数ellipse()则是直接在图像中绘制椭 ...

  9. 详解OpenCV的函数imread()和函数imshow(),并利用它们实现对图像的读取和显示

    详解OpenCV的函数imread()和函数imshow(),并利用它们实现对图像的读取和显示 目录 01-详解函数imread():读取图像文件 02-详解函数imshow():显示图像 03-使用 ...

  10. opencv中的approxPolyDP函数和boundingRect函数

    opencv中的approxPolyDP函数和boundingRect函数说明 cv2.boundingRect 举例: import numpy as npimage=cv2.imread(&quo ...

最新文章

  1. js创建对象的几种方法及继承
  2. python 在windows 中文显示
  3. mybatisplus 操作另一个数据库的数据_c#连接sql数据库以及操作数据库
  4. Collection集合概述
  5. 动态规划经典算法--最大子段和
  6. unity 天空盒_Unity自定义可编程渲染管线(SRP)(二)——编写第一个自定义SRP
  7. 前端学习(705):do-while
  8. catalog move.php,catalog.php
  9. 数的划分(信息学奥赛一本通-T1440)
  10. Android四级缓存,RecyclerView的四级缓存-初探
  11. MVC开发中的常见错误-02-在应用程序配置文件中找不到名为“OAEntities”的连接字符串。...
  12. IPv6 带来的反欺诈难题,程序员该如何破解?
  13. 关于hashcode和equals方法
  14. GEE:快速下载数字高程DEM数据
  15. AppCompat (AppCompatActivity) Jetpack
  16. Android GPS应用开发
  17. java程序设计大赛acm_参加ACM程序设计大赛,对C的掌握程度要多深??
  18. [noip2011]铺地毯(carpet)解题报告
  19. 信息安全工程07875 自考软件工程 助学班复习纲要
  20. 在线人民币大写转换器工具-把数字金额转换成中文大写

热门文章

  1. JSP+JavaBean+Servlet+Oracle新增功能中对Date类型的字段的处理
  2. 灵光一闪-(面对对象实践)
  3. 开发工具 之 PowerDesigner
  4. iOS上应用Static Framework
  5. 知识管理在中国的发展趋势
  6. 微信小程序-day1
  7. Spring结合马士兵视频的学习经验
  8. 个人学习进度(第四周)
  9. 蓝桥杯 公约数公倍数
  10. CodeSmith连接Mysql配置