网上看了几个帖子,自己试了一下,都以一点点错误和不匹配,于是自己修改了一个新的版本。用skimage.measure.label寻找最大连通域
from skimage import measure
# 输入二值图像mask
def largeConnectComponent(bw_image):
labeled_img, num = measure.label(bw_image, neighbour, background=0, return_num=True)
# 这里返回的labeled_img是一幅图像,不再是一副二值图像,有几个连通域,最大值就是几,num是连通域个数,1个连通域的话num=1
max_label = 0
max_num = 0
# 图像全黑,没有连通域num=0,或者是由一个连通域num=1,直接返回原图像
if num == 0 or num == 1:
return bw_image
else:
for i in range(1, num+1): #注意这里的范围,为了与连通域的数值相对应
# 计算面积,保留最大面积对应的索引标签,然后返回二值化最大连通域
if np.sum(labeled_img == i) > max_num:
max_num = np.sum(labeled_img == i)
max_label = i
lcc = (labeled_img == max_label)
return lcc
希望对大家有帮助!