opencv形态学中的孔洞填充详细图解
作者:Henry_zs 发布时间:2021-08-14 00:44:10
标签:opencv,孔洞填充,形态学
1. 原理
孔洞指的是被前景像素点或者说感兴趣的像素点包围起来的区域,这个区域是我们不感兴趣的背景区域。
数字图像处理的孔洞填充的公式为:
I 为前景像素 ,c 为补集
其实孔洞填充的步骤就是一个迭代的过程:
先设置一个填充的起始点,需要在孔洞的内部。如d图所示,然后被结构元B(图c)膨胀。
然后,为了将膨胀的结果限制在孔洞内部,需要和原图(图a)的补集(图b)相交(图e),因为如果不控制膨胀的结果的话,那么膨胀会填充整个区域,而膨胀结果和原图的补集相交,会使结果限制到我们感兴趣的区域内部,也就是孔洞。
其次,重复这个过程,直到第k步和第k+1的步骤结果相同,那么我们可以认为孔洞已经被填充完毕(图h)
最后,和原图相加即可(图i)
2. 漫水填充算法
注:这里的mask必须为图像长宽+2,且类型要是uint8
我们对下面图像做孔洞填充
# -*- coding: utf-8 -*-
import cv2
import numpy as np
def holefill(img):
img_copy = img.copy()
mask = np.zeros((img.shape[0]+2,img.shape[1]+2),dtype=np.uint8)
cv2.floodFill(img,mask,(0,0),255)
img_inverse = cv2.bitwise_not(img)
dst = cv2.bitwise_or(img_copy,img_inverse)
return dst
img = cv2.imread('hole.png',0)
thresh , img = cv2.threshold(img,127,255,cv2.THRESH_BINARY)
img_copy =img.copy()
dst = holefill(img)
cv2.imshow('img',np.hstack((img_copy,dst)))
cv2.waitKey()
cv2.destroyAllWindows()
处理的结果为
代码详解:
1. 首先将图像进行二值化处理,转为二值图像
2. 通过图像的长和宽设置掩膜mask,类型为uint8
3. floodFill 会对原图像进行操作,所以事先需要拷贝图像,将漫水的种子设为(0,0)也就是图像的左上角,填充的颜色为255。虽然通过计算找到孔洞的位置,然后直接填充就可以,但是这样比较麻烦,且孔洞较多的时候不好处理。这里我们将除了 前景像素点和孔洞 的位置都填充为前景像素点,然后通过求反就可以得到所有的孔洞的位置
4. 最后将孔洞和原图相加即可
来源:https://blog.csdn.net/qq_44886601/article/details/127194908


猜你喜欢
- 方法一:也是最简单的 直接使用pd.to_datetime函数实现data['交易时间'] = pd.to_datetime
- 问题现象元素的属性中没有id、name;虽然有class,但比较大众化,且位置也不固定;例如:页码中的下一页;那该如何找到该元素?<a
- CAS算法(compare and swap)CAS算法涉及到三个操作数需要读写的内存值V进行比较的值A拟写入的新值B当且仅当 V 的值等于
- SQL注入攻击的总体思路是:1.发现SQL注入位置;2.判断后台数据库类型;3.确定XP_CMDSHELL可执行情况4.发现WEB虚拟目录5
- 2016年9月22日凌晨,微信宣布“小程序”问世,妈的,论坛,博客全是小程序,昨天当之无愧抢了头条,当然只是开始内测了,微信公众平台对200
- 例如1441,那么会产生“运行时错误”,报错信息类似下面:SessionID 错误 'ASP 0164 : 80004005'
- 如何使用GPU而不是CPU首先查看设备from tensorflow.python.client import device_libprin
- 我们日常用CSS布局的时候,关于图片背景,大部分的人都是一个背景一张图片的,怎么说呢?这是很标准的方法,但是这种普通制作方式下要保存大量图片
- '去掉字符串头尾的连续的回车和空格 function trimVBcrlf(str) tr
- 本文实例讲述了js实现遮罩层弹出框的方法。分享给大家供大家参考。具体分析如下:昨天公司网站需要弹窗提示一些信息,要我在把弹窗的js代码和弹窗
- 本文实例分析了Python闭包执行时值的传递方式。分享给大家供大家参考,具体如下:代码中有问题和问题的解释。#!/usr/bin/pytho
- python是解释型语言,本文介绍了Python下利用turtle实现绘图功能的示例,本例所示为Python绘制一个树枝,具体实现代码如下:
- 一、网络请求在uni中可以调用uni.request方法进行请求网络请求需要注意的是:在小程序中网络相关的 API 在使用前需要配置域名白名
- 本文将展示一个开源JavaScript库,该脚本库给AJAX应用程序带来了书签和后退按钮支持。在学习完这个教程后,开发人员将能够获得对一个A
- 一、简介Shp格式是GIS中非常重要的数据格式,主要在Arcgis中使用,但在进行很多基于网页的空间数据可视化时,通常只接受GeoJSON格
- 前言在github中经常可以看到下面的日历图,可以用来表示每一天在github上的活跃程度。类似的方法也可以用到空气质量的可视化方式中来,只
- ASP结合ADO对数据库方便快捷的访问、结合XML、COM/ActiveX等其它技术 实现服务器多层结构的功能使它在今天还有着顽强的生命力。
- 这里介绍的是直接在package.json中直接配置使用:1.基础配置"build": { // 这里是el
- 方法一:#导入math包import math#定义点的函数class Point: def __init__(self,x=0
- Mysql事务操作失败如何解决事务的原子性 :事务是数据库的逻辑工作单位,事务中包含的各操作要么都做,要么都不做 。要实现事务的原子性,单单