num_labels,etiquetas,stats,cetroids=cv2.connectedComponentStats(img,conectividad=8)
Entre ellos, num_labels: el número total de dominios conectados;
etiquetas: el número de etiqueta de cada dominio conectado;
estadísticas: cada dominio conectado corresponde a la información de coordenadas, ancho, alto y área de la esquina superior izquierda;
centroides: información de coordenadas del punto central de cada dominio conectado.
# 经过灰度变换、二值化处理后的图片命名为test2
# 连通域
num_labels, labels, stats, centroids = cv2.connectedComponentsWithStats(test2, connectivity=8)
areas = list() # 计算平均面积
for i in range(1, num_labels):
areas.append(stats[i][-1])
print("轮廓%d的面积:%d" % (i, stats[i][-1]))
area_avg = np.average(areas[1:-1])
print("平均值:", area_avg)
image_filtered = np.zeros_like(test2) # 输出与test2形状相同的列表,且元素全为0
for (i, label) in enumerate(np.unique(labels)): # np.unique()去除其中重复的元素,并返回一个从小到大排列的元组或列表
if label == 0: # 如果是背景,忽略
continue
if stats[i][-1] > area_avg: # 获取第i个连通域的面积并判断是否大于均值
image_filtered[labels == i] = 255
x1 = stats[i][0] # 获取第i个连通域的左上角x坐标
y1 = stats[i][1] # 获取第i个连通域的左上角y坐标
x2 = stats[i][0] + stats[i][2] # 获取第i个连通域的右下角x坐标:x1+w
y2 = stats[i][1] + stats[i][3] # 获取第i个连通域的右下角y坐标: y1+h
print(centroids[i]) # 输出第i个连通域中心点坐标值
cv2.rectangle(image, (x1,y1), (x2, y2), (0, 255, 0), 2) # 通过面积筛选出想要的区域后,画出
# 下一步显示有目标框的图像