Python opencv连通域

1、求解连通域

        Opencv 连通域函数connectedComponentsWithStats

        num_labels, labels, stats, centroids = cv2.connectedComponentsWithStats(image)

        输入:

        image:必须是二值化图像,检测的连通域为白色部分。

        输出:

        num_labels:所有连通域的数目

        labels:图像上每一像素的标记,用数字1、2、3…表示(不同的数字表示不同的连通域)

       stats:每一个标记的统计信息,是一个5列的矩阵,每一行对应每个连通区域的外接矩形的 x(左上角)、y(左上角)、width(宽度)、height(高度)和面积(点的数量),示例如下: 0 0 720 720 291805。

        centroids:连通域的中心。

2、示例代码

import cv2
import numpy as np

if __name__ == '__main__':
    image = np.zeros((640, 640)).astype(np.uint8)
    #绘制圆形
    image = cv2.circle(image, (100, 100), 50, 255, -1)
    #绘制多边形
    points = [[200, 200], [300, 100], [400, 400], [250, 300]]
    cv2.fillPoly(image, np.array([points]), 255, cv2.LINE_AA)
    #绘制矩形
    cv2.rectangle(image, (200,500), (500, 600), 255, -1)
    cv2.imshow('image', image)
    num_labels, labels, stats, centroids = cv2.connectedComponentsWithStats(image)
    print('num_labels: ', num_labels)
    labels[labels>0] = 255
    labels = labels.astype(np.uint8)
    #将一维灰度图像扩展到三维
    labels= np.expand_dims(labels,axis=2).repeat(3,axis=2).astype(np.uint8)
    for st in stats[1:]:
        cv2.rectangle(labels, (st[0], st[1]), (st[0]+st[2], st[1]+st[3]), (0, 255, 0), 3)
    cv2.imshow('labels', labels)
    cv2.waitKey(0)

3、测试结果

更多三维、二维感知算法和金融量化分析算法请关注“乐乐感知学堂”微信公众号,并将持续进行更新。

猜你喜欢

转载自blog.csdn.net/suiyingy/article/details/126627295