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

    文章

    1484

    浏览量

    61810
  • OpenCV
    +关注

    关注

    30

    文章

    628

    浏览量

    41258
  • 泛洪算法
    +关注

    关注

    0

    文章

    2

    浏览量

    1313

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

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

收藏 人收藏

    评论

    相关推荐

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

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

    AIGC算法解析及其发展趋势

    AIGC(Artificial Intelligence Generated Content,人工智能生成内容)算法是当今前沿科技的代表,它利用人工智能技术和算法自动生成各种形式的内容。
    的头像 发表于 10-25 15:35 334次阅读

    底部填充工艺在倒装芯片上的应用

    底部填充工艺在倒装芯片(FlipChip)上的应用是种重要的封装技术,旨在提高封装的可靠性和延长电子产品的使用寿命。以下是该工艺的主要应用和优势:增强可靠性:倒装芯片封装的焊点(常为金锡合金或铅
    的头像 发表于 07-19 11:16 674次阅读
    底部<b class='flag-5'>填充</b>工艺在倒装芯片上的应用

    opencv图像识别有什么算法

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

    opencv-python和opencv样吗

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

    opencv的主要功能有哪些

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

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

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

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

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

    什么是芯片底部填充胶,它有什么特点?

    什么是芯片底部填充胶,它有什么特点?芯片底部填充胶是种用于电子封装的胶水,主要用于底部填充bga芯片电子组件,以增强组件的可靠性和稳定性。它通常是
    的头像 发表于 03-14 14:10 968次阅读
    什么是芯片底部<b class='flag-5'>填充</b>胶,它有什么特点?

    填充胶是做什么用的?

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

    填充宽度对于精确的焊盘填充过大的影响

    填充宽度是指在焊接过程,焊盘与焊芯之间的间隔。填充宽度的大小直接影响到焊接质量、焊接强度和焊接过程的稳定性等方面。填充宽度过大可能会导致诸多问题,本文将从焊接质量、焊接强度和焊接过程
    的头像 发表于 12-26 17:15 3990次阅读

    OpenCV边缘模板匹配算法原理详解

    OpenCV自带的模板匹配算法,完全是像素基本的模板匹配,特别容易受到光照影响,光照稍微有所不同,该方法就会歇菜了!搞得很多OpenCV初学者刚学习到该方法时候很开心,
    的头像 发表于 12-07 10:56 1326次阅读
    <b class='flag-5'>OpenCV</b>边缘模板匹配<b class='flag-5'>算法</b>原理详解