Python opencv连通域

本文介绍了如何使用OpenCV的connectedComponentsWithStats函数进行图像连通域检测,包括函数参数、示例代码以及测试结果。通过实例展示了如何标记和可视化不同连通域,适用于图像处理和计算机视觉任务。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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、测试结果

 

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

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Coding的叶子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值