赞
踩
最近处理图像的时候需要将图像中一些较小的黑色空洞填上,大致如下:
白色区域中的黑色点是需要填上的孔洞。
cv2中有一个叫cv2.floodFill的函数,可以淹没孔洞。但这个方法有两个很大的缺点。
第一个是需要手动的找到至少一个背景点
第二个是如果是多个白色区域围成的圆形,中间也有黑色的部分,但属于背景,不需要被填充。这种情况下也会把中间的黑色部分填充。
就很烦。
最近想到一个比较巧妙的方案。
具体思路就是把整个图像的黑白颠倒,然后孔洞就成了白色的小连通域,这样子直接使用skimage中去除小连通域的方法就可以了,大体的代码如下:
#pre_mask是包含有黑色孔洞的二值图像
#这里将原图像黑白反转
pre_mask_rever = pre_mask<=0
#这里的min_size是表示需要删除的孔洞的大小,可以根据需要设置
pre_mask_rever = skimage.morphology.remove_small_objects(pre_mask_rever, \
min_size=50)
#将删除了小连通域的反转图像再盖回原来的图像中
pre_mask[pre_mask_rever<=0] = 1
这样子,就能得到删除孔洞后的图像:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。