我们在进行图像分割后,分割结果有时会有一些小孔洞,如图1所示,其中黑白两色表示两种不同的类别。一般情况下,这些孔洞属于错分情况,为了优化结果,我们通常对这些孔洞进行填充。今天我们就用python语言基于OpenCV实现孔洞填充。
我们要用到的函数是OpenCV里的floodFill函数。使用floodFill函数可以得到只标记孔洞的像素矩阵(孔洞值为0,非孔洞值为指定值)。有了孔洞的位置填充孔洞就容易多了。python代码如下。
import
填充结果如图2所示,三个孔洞均被填充。
现在又有一个问题,就是说如果我们的多类分割呢,就像图3所示。我们可以利用for循环分颜色进行单类别填充孔洞,然后进行合并。python代码如下。
import cv2;
import numpy as np;
def FillHole_RGB(imgPath,SavePath):
# 读取图像为uint32,之所以选择uint32是因为下面转为0xbbggrr不溢出
im_in_rgb = cv2.imread(imgPath).astype(np.uint32)
# 将im_in_rgb的RGB颜色转换为 0xbbggrr
im_in_lbl = im_in_rgb[:,:,0] + (im_in_rgb[:,:,1] << 8) + (im_in_rgb[:,:,2] << 16)
# 将0xbbggrr颜色转换为0,1,2,...
colors, im_in_lbl_new = np.unique