接続されたドメイン cv2.connectedComponentsWithStats() の使用法

num_labels,labels,stats,cetroids=cv2.connectedComponentStats(img,connectivity=8)

このうち、num_labels: 接続されているドメインの総数。

        ラベル: 接続されている各ドメインのラベル番号。

        stats: 接続された各ドメインは、左上隅の座標情報、幅、高さ、面積に対応します。

        centroids: 接続された各ドメインの中心点の座標情報。

# 经过灰度变换、二值化处理后的图片命名为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)  # 通过面积筛选出想要的区域后,画出

# 下一步显示有目标框的图像

   

おすすめ

転載: blog.csdn.net/weixin_50847463/article/details/131844389