OpenCV4.5.5学习笔记(十七):分水岭算法watershed(),图像修补inpaint()
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
- 前言
- 一、分水岭算法watershed()
- 二、图像修补inpaint()
- 总结
前言
笔者本科时候有幸接触了OpenCV3.2.0版本的学习,后因考研压力不得不暂时停下学习的脚步,现在考研任务结束了,未来的导师也是从事的该方向,笔者又开始了新一轮的学习。回来发现OpenCV已经出到了4.5.5版本,遂重新下载新版本并决定记录这一学习历程。由于笔者水平有限,可能有错误之处还请诸位大佬多多包涵并烦请指出,让我们一起学习,共同进步。
首先需要说明的是:我是按着毛星云前辈编写的OpenCV3编程入门进行学习的,我会尽力把星云前辈的程序转成符合OpenCV4.5.5版本的。毛星云前辈于2021年12月11日不幸过世,他是我非常敬仰的一位业内大佬,我也是看他的书才开始接触OpenCV。
一、分水岭算法watershed()
在许多实际运用中,我们需要分割图像,但无法从背景图像中获得有用信息。分水岭算法在这方面往往是非常有效的。此算法可以将图像中的边缘转化成“山脉”,将均匀区域转化为“山谷”,这样有助于分割目标。
分水岭算法,是一种基于拓扑理论的数学形态学的分割方法,其基本思想是把图像看作是测地学上的拓扑地貌,图像中每一点像素的灰度值表示该点的海拔高度,每一个局部极小值及其影响区域称为集水盆,而集水盆的边界则形成分水岭。分水岭的概念和形成可以通过模拟浸入过程来说明在每一个局部极小值表面,刺穿一个小孔,然后把整个模型慢慢浸入水中,随着浸入的加深,每一个局部极小值的影响域慢慢向外扩展,在两个集水盆汇合处构筑大坝,即形成分水岭。
在将图像传递给函数之前,您必须用正 (>0) 索引粗略地勾勒出图像标记中所需的区域。因此,每个区域都表示为一个或多个具有像素值 1、2、3 等的连通分量。可以使用findContours和drawContours从二进制掩码中检索此类标记(。标记是未来图像区域的“种子”。标记中的所有其他像素,其与轮廓区域的关系未知,应由算法定义,应设置为 0。在函数输出中,标记中的每个像素都设置为“种子”组件的值,或者在区域之间的边界处设置为 -1。
我们常用的是watershed()函数
在OpenCV官方文档中是这么写的:
void cv::watershed (
InputArray image,
InputOutputArray markers
)
第一个参数是输入 8 位 3 通道图像,
第二个参数是输入/输出标记的 32 位单通道图像(地图)。它应该与 image 具有相同的大小
二、图像修补inpaint()
使用区域邻域恢复图像中的选定区域。
我们常用的是inpaint()函数
在OpenCV官方文档中是这么写的:
void cv::inpaint (
InputArray src,
InputArray inpaintMask,
OutputArray dst,
double inpaintRadius,
int flags
)
第一个参数是输入 8 位、16 位无符号或 32 位浮点 1 通道或 8 位 3 通道图像,
第二个参数是修复蒙版,8 位 1 通道图像。非零像素表示需要修复的区域,
第三个参数是输出与 src 大小和类型相同的图像,
第四个参数是算法考虑的每个修复点的圆形邻域的半径,
第五个参数是cv::INPAINT_NS或cv::INPAINT_TELEA的修复方法
总结
分水岭函数程序运行效果图:
图像修补函数运行效果图(原图):
图像修补函数运行效果图(破坏图与修复图):
OpenCV4.5.5学习笔记(十七):分水岭算法watershed(),图像修补inpaint()相关推荐
- 图像轮廓、凸包、图像的矩、分水岭算法、图像修补
文章目录 1.查找并绘制轮廓 1.1 寻找轮廓:findContours() 函数 1.2 绘制轮廓:drawContours() 函数 1.3 示例程序:轮廓查找 1.4 综合示例:查找并绘制轮廓 ...
- OpenCV学习笔记(十六)——CamShift研究 OpenCV学习笔记(十七)——运动分析和物体跟踪Video OpenCV学习笔记(十八)——图像的各种变换(cvtColor*+)imgproc
OpenCV学习笔记(十六)--CamShift研究 CamShitf算法,即Continuously Apative Mean-Shift算法,基本思想就是对视频图像的多帧进行MeanShift运算 ...
- OpenCV学习笔记(十七)——K均值聚类
当我们要预测的是一个离散值时,做的工作就是"分类".机器学习模型还可以将训练集中的数据划分为若干个组,每个组被称为一个"簇(cluster)".它的重要特点是在 ...
- OpenCV学习(二十) :分水岭算法:watershed()
OpenCV学习(二十) :分水岭算法:watershed() 参考博客: OpenCV-分水岭算法 图像处理--分水岭算法 OpenCV学习(7) 分水岭算法(1) Opencv分水岭算法--wat ...
- R语言与机器学习学习笔记(分类算法)
转载自:http://www.itongji.cn/article/0P534092014.html 人工神经网络(ANN),简称神经网络,是一种模仿生物神经网络的结构和功能的数学模型或计算模型.神经 ...
- windows内核开发学习笔记十七:IRP 和 IO_STACK_LOCATION 的交互
windows内核开发学习笔记十七:IRP 和 IO_STACK_LOCATION 的交互 前面两篇学习笔记分别介绍了IRP和IO_STACK_LOCATION,整个设备栈来处理这个IRP,但是每个设 ...
- 《基于张量网络的机器学习入门》学习笔记8(Shor算法)
<基于张量网络的机器学习入门>学习笔记8 Shor算法 来源 Shor算法的大致流程 因数分解 周期求取与量子傅里叶变换(QFT) Shor算法 来源 1994 1994 1994年,应用 ...
- 【学习笔记】【算法】【智能优化】粒子群优化(PSO)
[学习笔记][算法][智能优化]粒子群优化(PSO) 文章目录 [学习笔记][算法][智能优化]粒子群优化(PSO) 1 算法背景 1.1 背景 1.2 基础知识 2 算法原理 2.1 基本原理 2. ...
- 【学习笔记】网络流算法简单入门
[学习笔记]网络流算法简单入门 [大前言] 网络流是一种神奇的问题,在不同的题中你会发现各种各样的神仙操作. 而且从理论上讲,网络流可以处理所有二分图问题. 二分图和网络流的难度都在于问题建模,一般不 ...
最新文章
- 【C语言】数组指针与指针数组的区分与应用
- 5G:新基建的压舱石,如何为新基建按下“加速键”?
- 对面向对象设计原则的总结
- 协议层次及其服务模型
- 这是我在网上安的第一个窝!
- SpringCloud底层原理
- java将数组中的数据修改,深度集成!
- jQuery基本过滤选择器
- struts启动过滤器异常_SpringCloud Gateway高阶之全局异常处理
- html作业本,连作业本都不用买了!Word做作业本竟这么简单
- 概率论与数理统计---全概率、贝叶斯公式、事件独立性
- html怎么设置顶部导航栏,CSS+HTML如何实现顶部导航栏
- 软工网络15团队作业7——Alpha冲刺之事后诸葛亮
- Python做数据处理(二):贷款风险预测
- HTML+CSS网页制作——人生指南
- 智能家居改装方案学习笔记【双控灯改智能单控灯】2022.05.08
- 2020年书法落款_学书法的请注意,落款不要写“庚子年”
- 关于axios配置拦截器不生效的问题
- “人生苦短,我用Python“——拒绝服务攻击
- 亚像素卷积网络(ESPCN)学习与Pytorch复现
热门文章
- gitlab-ce安装及汉化
- 吃鸡一个账号能进几个服务器,绝地求生国服QQ号可以绑定多少个steam账号?
- 做原生app美工Android ios,这个软件可能让你成为IOS的美工
- QQ帮助他人03-Skype for business 用户无法登录
- 【聚宽本地数据JQData】一个命令获取全部股票全部的财务报表数据
- Revit坡道问题:快速设置坡道及坡度与长度
- smart-doc 使用说明
- STM32:红外传感器代码部分(内含实物图+外部信号流程,编写代码思路+代码+解析代码和扩展应用)
- linux中wine文件夹在哪,科学网—Linux下wine的安装和使用以及CAJviewer的安装 - 苗玉虎的博文...
- 数据湖加速器GooseFS,加速湖上数据分析性能