import cv2 from skimage import morphology,data,color,io,measure,filters,feature import numpy as np def binary_img(img): ''' 图像二值化 :param img:需要处理的图片 :return:返回二值化后的图片 ''' if len(img.shape)>2: img=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) _,dst=cv2.threshold(img,128,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU) return dst def liantongquyu(img): ''' 提取连通区域 :param img: 待处理图像 :return: 连通区域 ''' dst=binary_img(img) labels=measure.label(dst,connectivity=2) #8连通区域标记 dst0=color.label2rgb(labels) #根据不同的标记显示不同的颜色 print('regions number:',labels.max()+1) #显示连通区域块数(从0开始标记) return dst0 def fill_color_demo(img): ''' 孔洞填充 :param img: 待处理图像 :return: 填充孔洞后的图像 ''' copy_image = img.copy() h, w = img.shape[:2] mask = np.zeros([h+2, w+2], np.uint8) cv2.floodFill(copy_image, mask, (30,30), (0, 255, 255),(100, 100, 100), (50, 50, 50), cv2.FLOODFILL_FIXED_RANGE)#区域填充参数设置# return copy_image def get_connective_region(img,minArea=100): img0=img.copy() img1=cv2.cvtColor(img0,cv2.COLOR_BGR2GRAY) img1 = cv2.Laplacian(img1,cv2.CV_64F) img1 = cv2.convertScaleAbs(img1) row,col=img1.shape _, labels, stats, centroids = cv2.connectedComponentsWithStats(img1) for istat in stats: if istat[4] >minArea and istat[2]