connectedComponentsWithStats源码
时间: 2023-07-05 18:17:36 浏览: 286
connectedComponentsWithStats函数是OpenCV中用于进行图像连通性分析的函数,它可以将一个二值图像中的所有连通域进行分析,并返回每个连通域的一些统计信息。
下面是connectedComponentsWithStats函数的源码实现:
```cpp
int cv::connectedComponentsWithStats(InputArray _image, OutputArray _labels,
OutputArray _stats, OutputArray _centroids,
int connectivity, int ltype, int ccltype)
{
CV_INSTRUMENT_REGION()
Mat image = _image.getMat();
_labels.create(image.size(), CV_32S);
Mat labels = _labels.getMat();
labels = Scalar(-1);
cv::internal::ConnectedComponentsAlgoSet ccalgos(connectivity, ltype, ccltype);
cv::internal::ConnectedComponentsInvoker invoker(image, labels, ccalgos);
invoker();
Mat stats, centroids;
_stats.create(ccalgos.blob_count, CC_STAT_MAX, CV_32S);
_centroids.create(ccalgos.blob_count, 2, CV_64F);
stats = _stats.getMat();
centroids = _centroids.getMat();
invoker.getStats(stats);
invoker.getCentroids(centroids);
return ccalgos.blob_count;
}
```
其中,输入参数_image表示输入的二值图像,_labels表示输出的标记图像,_stats表示输出的连通域的统计信息,_centroids表示输出的连通域的质心坐标。connectivity表示图像的连通性,ltype表示标记图像的数据类型,ccltype表示连通域分析算法的类型。
该函数先将标记图像_labels初始化为-1,然后通过调用cv::internal::ConnectedComponentsInvoker类来进行连通性分析。分析完成后,通过invoker.getStats(stats)和invoker.getCentroids(centroids)来获取连通域的统计信息和质心坐标。最后,返回连通域的数量ccalgos.blob_count。
注意,在调用该函数之前需要先导入OpenCV库,并且需要确保输入图像为二值图像。
阅读全文