0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

一文解析OpenCV中泛洪填充算法与应用

新机器视觉 来源:OpenCV学堂公众号 作者:OpenCV学堂公众号 2021-04-09 10:25 次阅读

泛洪填充(Flood Fill)很多时候国内的开发者称它为漫水填充,该算法在图形填充与着色应用程序比较常见,属于标配。在图像处理里对二值图像的Hole可以通过泛洪填充来消除,这个是泛洪填充在图像处理中很经典的一个用途,此外还可以通过泛洪填充为ROI区域着色。这个在图像处理也经常用到。让我们首先看一下泛洪填充算法本身,然后再说一下在图像处理中的应用场景。

泛洪填充算法

通常泛洪填充需要从一个点开始,这个点可以随机选择的一点,但是一定要在填充区域内部,然后它就会进行四邻域或者把邻域寻找对周围像素完成填充,直到遇到跟指定随机点像素值不同的像素为止,也可以认为是到达了区域边界。通过邻域像素寻找实现填充速度比较慢、不是泛洪填充好的实现方式,最常见与快速的泛红实现是基于扫描线算法的,步骤如下:

1.首先从开始点出发进行垂直方向列的扫描,填充

2.然后以填充点开始进行每一行的扫描与填充

3.继续以每一行新填充的像素为开始点,执行1,2步骤

4.直到区域所有点都完成填充为止。

图示如下:

第一步:假设有图像如下,红色表种子像素点。

482a1852-98d9-11eb-8b86-12bb97331649.png

首先进行竖直方向的扫描,填充结果如下:

484920ee-98d9-11eb-8b86-12bb97331649.png

然后以填充的红色像素为起始点,开始水平方向的扫描填充,结果如下:

4865be3e-98d9-11eb-8b86-12bb97331649.png

用水平方向被填充像素点为种子像素点,继续竖直方式扫描填充,结果如下:

48739b12-98d9-11eb-8b86-12bb97331649.png

以填充的像素点为种子像素点继续水平方向扫描,结果如下:

488483e6-98d9-11eb-8b86-12bb97331649.png

这样就完成了对整个区域的填充。从上面的例子可以看出,泛洪填充可以通过递归方式编码实现,但是基于递归方式编码实现有个致命的缺点,对大图填充时候容易导致栈溢出,所以更常用的基于队列或者栈的数据结构实现非递归的泛洪填充。OpenCV中的实现主要是基于栈的扫描线算法实现泛洪填充。

应用场景一:

通过泛洪填充算法实现对二值图像对象区域中Hole填充

运行显示原图如下:

489fade2-98d9-11eb-8b86-12bb97331649.png

填充以后结果如下:

48b3b8be-98d9-11eb-8b86-12bb97331649.png

实现代码如下:

48cb96d2-98d9-11eb-8b86-12bb97331649.jpg

应用场景二:

通过泛洪填充实现对ROI区域的着色, 跟上个例子使用API唯一不同地方是带了mask参数。运行结果如下:

48f93bb4-98d9-11eb-8b86-12bb97331649.png

实现代码如下:

4934b072-98d9-11eb-8b86-12bb97331649.jpg

编辑:jq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • API
    API
    +关注

    关注

    2

    文章

    1506

    浏览量

    62204
  • OpenCV
    +关注

    关注

    31

    文章

    635

    浏览量

    41411
  • 泛洪算法
    +关注

    关注

    0

    文章

    2

    浏览量

    1338

原文标题:OpenCV中泛洪填充算法解析与应用

文章出处:【微信号:vision263com,微信公众号:新机器视觉】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    芯片底部填充胶种类有哪些?

    芯片底部填充胶种类有哪些?底部填充胶(Underfill)又称底部填充剂,指以高分子材料为原材料制成的电子封装胶,主要用于在芯片和基板之间的空隙
    的头像 发表于 12-27 09:16 303次阅读
    芯片底部<b class='flag-5'>填充</b>胶种类有哪些?

    PCB设计填充铜和网格铜有什么区别?

    填充铜(SolidCopper)和网格铜(HatchedCopper)是PCB设计两种不同的铺铜方式,它们在电气性能、热管理、加工工艺和成本方面存在些区别:1.电气性能:填充铜:提
    的头像 发表于 12-10 16:45 101次阅读
    PCB设计<b class='flag-5'>中</b><b class='flag-5'>填充</b>铜和网格铜有什么区别?

    PCB设计填充铜和网格铜有什么区别?

    填充铜(SolidCopper)和网格铜(HatchedCopper)是PCB设计两种不同的铺铜方式,它们在电气性能、热管理、加工工艺和成本方面存在些区别:1.电气性能:填充铜:提
    的头像 发表于 12-10 11:18 80次阅读
    PCB设计<b class='flag-5'>中</b><b class='flag-5'>填充</b>铜和网格铜有什么区别?

    【AI实战项目】基于OpenCV的“颜色识别项目”完整操作过程

    OpenCV个广受欢迎且极为流行的计算机视觉库,它因其强大的功能、灵活性和开源特性而在开发者和研究者备受青睐。学习OpenCV主要就是学习里面的计算机视觉
    的头像 发表于 12-09 16:42 408次阅读
    【AI实战项目】基于<b class='flag-5'>OpenCV</b>的“颜色识别项目”完整操作过程

    个月速成python+OpenCV图像处理

    OpenCV个广受欢迎且极为流行的计算机视觉库,它因其强大的功能、灵活性和开源特性而在开发者和研究者备受青睐。学习OpenCV主要就是学习里面的计算机视觉
    的头像 发表于 11-29 18:27 174次阅读
    <b class='flag-5'>一</b>个月速成python+<b class='flag-5'>OpenCV</b>图像处理

    手写图像模板匹配算法OpenCV的实现

    OpenCV的模板匹配是支持基于NCC相似度查找的,但是不是很好用,个主要的原因是查找最大阈值,只能匹配个,自己比对阈值,又导致无法正确设定阈值范围,所以问题很多。于是我重新写了
    的头像 发表于 11-11 10:12 282次阅读
    手写图像模板匹配<b class='flag-5'>算法</b>在<b class='flag-5'>OpenCV</b><b class='flag-5'>中</b>的实现

    opencv图像识别有什么算法

    OpenCV(Open Source Computer Vision Library)是个开源的计算机视觉和机器学习软件库,提供了大量的图像处理和计算机视觉相关的算法。以下是些常见
    的头像 发表于 07-16 10:40 1123次阅读

    opencv-python和opencv样吗

    样。OpenCV(Open Source Computer Vision Library)是个开源的计算机视觉和机器学习软件库,它提供了大量的图像和视频处理功能。OpenCV
    的头像 发表于 07-16 10:38 1284次阅读

    opencv的主要功能有哪些

    OpenCV(Open Source Computer Vision Library)是个开源的计算机视觉库,提供了大量的计算机视觉算法和工具。以下是OpenCV的主要功能: 图像处
    的头像 发表于 07-16 10:35 1638次阅读

    OpenCV携奥比光3D相机亮相CVPR 2024

    和机器学习软件库,提供丰富的图像处理和计算机视觉算法。奥比光与OpenCV的深入合作,使得复杂的3D感知项目开发变得简单高效。全球开发者及企业用户可借助奥比光先进的3D相机技术和
    的头像 发表于 06-21 09:38 600次阅读

    等离子清洗及点胶轨迹对底部填充胶流动性的影响

    共读好书 翟培卓,根深,王印权,李守委,陈鹏,邵韬,柏鑫鑫 (中国电子科技集团公司第五十八研究所) 摘要: 倒装焊封装过程,底部填充胶的流动性决定了
    的头像 发表于 06-17 08:44 412次阅读
    等离子清洗及点胶轨迹对底部<b class='flag-5'>填充</b>胶流动性的影响

    I.MX6ULL-飞凌 ElfBoard ELF1板卡 - 如何在Ubuntu编译OpenCV库(X86架构)

    Ubuntu环境下编译X86架构的OpenCV,这为快速迭代产品、优化算法提供了坚实的支撑。希望本篇指南能成为各位小伙伴在嵌入式技术探索之旅上的得力助手。如果您在实践过程遇到任何问题,欢迎留言交流。
    发表于 06-07 09:32

    嵌入式学习-飞凌ElfBoard ELF 1板卡 - 如何在Ubuntu编译OpenCV

    Ubuntu环境下编译X86架构的OpenCV,这为快速迭代产品、优化算法提供了坚实的支撑。希望本篇指南能成为各位小伙伴在嵌入式技术探索之旅上的得力助手。如果您在实践过程遇到任何问题,欢迎留言交流。
    发表于 06-07 09:21

    ELF 1技术贴|如何在Ubuntu编译OpenCV

    在之前发布的文章探讨了交叉编译OpenCV并部署至嵌入式系统的方法。然而,在调试阶段,我们发现在Ubuntu环境下将OpenCV编译为X86架构可能更加方便和高效。通过在主机上编译并使用X86架构
    的头像 发表于 05-31 16:41 1182次阅读
    ELF 1技术贴|如何在Ubuntu<b class='flag-5'>中</b>编译<b class='flag-5'>OpenCV</b>库

    填充胶是做什么用的?

    填充胶是做什么用的?填充胶是种广泛应用于电子制造和其他工业领域的材料,它在提高产品性能、增强结构稳定性以及保护核心组件方面发挥着至关重要的作用。以下是关于填充胶的主要用途和它在不同应
    的头像 发表于 01-17 14:52 1059次阅读
    <b class='flag-5'>填充</b>胶是做什么用的?