retval, labels, stats, centroids = cv2.connectedComponentsWithStats(image, connectivity=8)
参数: image: 输入的图像,一般为灰度图,官方文档要求是8位单通道的图像;
connectivity:常用值为4或者8,分别代表 4联通域或者8联通域
返回值:
retval :连通域的数量,包括最外围的联通域,通常不使用
labels:与image同样维度,其中每一个连通区域会有一个唯一标识,标识从0开始
stats:包含5个参数分别为x,y,h,w,s。分别对应每一个连通区域的外接矩形的起始坐标, 总共retval个,第一个是最外围的连通域
centroids:包含每个连通区域的质心
#连通域可视化代码
re = np.zeros((img.shape[0], img.shape[1],3),np.uint8)
#retval, labels, stats, centroids
for i in range(1,retval):
mask = labels == i
re[:,:,0][mask] = np.random.randint(0,255)
re[:,:,1][mask] = np.random.randint(0,255)
re[:,:,2][mask] = np.random.randint(0,255)
cv2.imshow('temp_img', re)
cv2.waitKey(0)
#获取除外轮廓以外的最大面积的联通域的代码
#stats 代表返回的第三个参数
best_stats = np.argmax(stats[:, cv2.CC_STAT_AREA])
best_stats_area = stats[best_stats][cv2.CC_STAT_AREA]
best_stats_x = stats[best_stats][cv2.CC_STAT_LEFT]
best_stats_y = stats[best_stats][cv2.CC_STAT_TOP]
best_stats_w = stats[best_stats][cv2.CC_STAT_WIDTH]
best_stats_h = stats[best_stats][cv2.CC_STAT_HEIGHT]
#后续根据得到的左上角的坐标和w\h 画框可视化即可