connectedComponentsWithStats ()详细用法

前面的博客有Opencv连通域分析 connectedComponents函数的用法示例 
这里讲一个 connectedComponentsWithStats 函数的用法,这个函数能返回除了连通域图之外,还有一些统计信息。 
用法:

Mat Imglabels, Imgstats, Imgcentriods;
int Imglabelnum = connectedComponentsWithStats(Imgbw, Imglabels, Imgstats, Imgcentriods);

其中Imgbw是一个二值图,输出Imglabels是一副depth 是CV_32F的标签图,不同的连通域被赋该连通域的标签的值。 Imgstats包含了一些信息,如果想知道标签为i的连通域的一些信息,可以如下访问

Imgstats.at<int>(i, CC_STAT_AREA) //连通域的面积
double left = Imgstats.at<int>(i, CC_STAT_LEFT); //连通域的boundingbox的最左边
double top = Imgstats.at<int>(i, CC_STAT_TOP);//连通域的boundingbox的最上边
double width= Imgstats.at<int>(i, CC_STAT_WIDTH)  ;//连通域的宽
double height Imgstats.at<int>(i, CC_STAT_HEIGHT) ;//连通域的高

另外,连通域的重心

Point2f pt;  //pt就是重心
pt.x = Imgcentriods.at<double>(i, 0);
pt.y = Imgcentriods.at<double>(i, 1);

连通域的个数 
int labelNum =Imgcentriods.rows;
 

  • 6
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
`cv2.connectedComponentsWithStats()` 是 OpenCV 中用于计算图像中连通组件的函数。它的用法如下: ```python num_labels, labels, stats, centroids = cv2.connectedComponentsWithStats(image, connectivity, ltype) ``` 参数说明: - `image`:输入的二值图像,要求为单通道、8位无符号整型(`np.uint8`)。 - `connectivity`:连通性,指定为 4 或 8,分别表示四邻域连接和八邻域连接。 - `ltype`:输出标签图像的数据类型,默认为 `cv2.CV_32S`。 返回值说明: - `num_labels`:连通组件的数量(包括背景)。 - `labels`:与原始图像相同大小的标签图像,每个像素点被标记为一个连通组件的标签值(从 0 开始)。 - `stats`:一个包含每个连通组件的统计信息的数组,每一行包含 x、y、width、height 和 area(面积)。 - `centroids`:每个连通组件的质心坐标。 返回的 `labels` 图像中,背景像素的标签值为 0,其他像素点的标签值表示它们所属的连通组件。通过分析 `stats` 数组,可以获得每个连通组件的位置、大小等信息。 例如,可以通过以下方式获取面积最大的连通组件的面积和位置信息: ```python max_area = np.max(stats[1:, cv2.CC_STAT_AREA]) # 面积最大的连通组件的面积 max_area_index = np.argmax(stats[1:, cv2.CC_STAT_AREA]) + 1 # 面积最大的连通组件的标签值 x, y, width, height = stats[max_area_index, cv2.CC_STAT_LEFT:cv2.CC_STAT_HEIGHT+1] # 面积最大的连通组件的位置信息 ``` 需要注意的是,返回的 `labels` 和 `stats` 数组的大小与输入图像保持一致,因此在使用时需要根据实际需求和图像大小进行适当的切片或索引处理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值