OpenCV笔记:pyrDown()函数和pryUp()函数的使用
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)。
原文链接:https://blog.csdn.net/woainishifu/article/details/62888228
OpenCV笔记:pyrDown()函数和pryUp()函数的使用的更多相关文章
- Opencv笔记(四)——绘图函数
常用的绘图函数有: cv2.line() cv2.circle() cv2.rectangle() cv2.ellipse() cv2.putText( ...
- 《学习opencv》笔记——关于一些画图的函数
画图函数 (1)直线cvLine函数 其结构 void cvLine(//画直线 CvArr* array,//画布图像 CvPoint pt1,//起始点 CvPoint pt2,//终点 CvSc ...
- atitit opencv apiattilax总结 约500个函数 .xlsx
atitit opencv apiattilax总结 约500个函数 .xlsx 1.1. CxCore中文参考手册 1 1.2. 机器学习中文参考手册 knn svm 1 1.3. CvAu ...
- opencv 简单、常用的图像处理函数(2)
opencv的项目以来配置和环境变量的配置都很简单,对于我这个没有c++基础的来说,复杂的是opencv的api和一些大部分来自国外没有翻译的资料,以及一些常见的编码问题. 资料 opencv 中文a ...
- 《javascript dom编程艺术》笔记(一)——优雅降级、向后兼容、多个函数绑定onload函数
刚刚开始自学前端,如果不对请指正:欢迎各位技术大牛指点. 开始学习<javascript dom编程艺术>,整理一下学习到的知识.今天刚刚看到第六章,记下get到的几个知识点. 优雅降级 ...
- 小猪猪C++笔记基础篇(六)参数传递、函数重载、函数指针、调试帮助
小猪猪C++笔记基础篇(六) ————参数传递.函数重载.函数指针.调试帮助 关键词:参数传递.函数重载.函数指针.调试帮助 因为一些事情以及自己的懒惰,大概有一个星期没有继续读书了,已经不行了,赶紧 ...
- jmeter笔记(6)--参数化--函数助手
函数助手提供的功能很多,本次笔记主要整理_CSVRead 函数._Random函数以及_RandomString函数的基础使用方法 1._CSVRead 作用:直接读取csv文件的值生成函数 1.在[ ...
- MDX Step by Step 读书笔记(七) - Performing Aggregation 聚合函数之 Max, Min, Count , DistinctCount 以及其它 TopCount, Generate
MDX 中最大值和最小值 MDX 中最大值和最小值函数的语法和之前看到的 Sum 以及 Aggregate 等聚合函数基本上是一样的: Max( {Set} [, Expression]) Min( ...
- ES6学习笔记<二>arrow functions 箭头函数、template string、destructuring
接着上一篇的说. arrow functions 箭头函数 => 更便捷的函数声明 document.getElementById("click_1").onclick = ...
随机推荐
- JAVA调用shell脚本利用ansible修改多节点上的redis参数
创建hosts文件 创建ansible-playbook执行时所用到的hosts文件,例如 /etc/redis/hosts 利用shell命令根据传入的host名和地址写入hosts文件: #set ...
- Mybatis中SqlSessionFactory和SqlSession学习和原理
源码git地址:https://github.com/mybatis/mybatis-3 目标结构: mybatis是数据持久化解决方案将用户从JDBC访问中解放出来,用户只需要定义需要操作的SQL语 ...
- Kubeadm安装Kubernetes 1.15.1
一.实验环境准备 服务器虚拟机准备 IP CPU 内存 hostname 192.168.198.200 >=2c >=2G master 192.168.198.201 >=2c ...
- 十二、支持向量机(Support Vector Machines)
12.1 优化目标 参考视频: 12 - 1 - Optimization Objective (15 min).mkv 到目前为止,你已经见过一系列不同的学习算法.在监督学习中,许多学习算法的性能都 ...
- 初学css 行内元素与块级元素
行内元素与块级元素直观上的区别 1.行内元素会在一条直线上排列,都是同一行的,水平方向排列块级元素各占据一行,垂直方向排列.块级元素从新行开始结束接着一个断行. 2.块级元素可以包含行内元素和块级元素 ...
- Java 异步编程
昨天头儿给的学习文档我还没看完,头儿说:“MongoDB光会简单的添删改查什么的不行,要深入了解,你们连$set和$inc使用场景都分不清.” 确实,学习过一年多SQL,确实对学习MongoDB有点影 ...
- http请求中的Content-Length作用机制与分块chunked
httpclient-4.5.9.jar org.apache.http: auth 身份 client 端 conn 连接 cookie 本地 impl: 实现 exe ...
- HTML水平居中和垂直居中的实现方式
父元素是块元素,根据子元素不同分为以下几种: 1.子元素是行内元素: a.水平居中:在父元素上设置text-align:center; b.垂直居中:在行内子元素上设置行高与父元素相同line-hei ...
- Hibernate Validation与Spring整合各注解的用法Demo
转自:https://www.aliyun.com/jiaocheng/1315650.html <dependency> <groupId>org.hibernate< ...
- R语言——ifelse函数
在数据处理中,经常会遇到要对判断结果做处理的情况.if函数是经常遇到的. ifelse(cond,statment1,statment2) 如果cond成立,执行statment1,否则执行statm ...