connectedComonents函数 仅仅创建了一个标记图,图中不同的连通域使用不同的标记,图片的宽和高与原图一致
int cv::connectedComponents (
cv::InputArrayn image, // //8位单通道二值图像 (binary)
cv::OutputArray labels, // output label map //和原图一样大的标记图
int connectivity = 8, // 4- or 8-connected components
int ltype = CV_32S // Output label type (CV_32S or CV_16U)
);
该函数有返回值,为连通域的数量
两个函数功能相近,connectedComonentWithStats函数 输出的信息更多
//opencv中新增了connectedComonentWithStats函数, 可以帮助我们直接找到一张图片的连通区域, 不用再自己写连通函数了
//函数示例:
//int cv::connectedComponentsWithStats(InputArray image,
//OutputArray labels, //输入图像,8位单通道
//OutputArray stats,
//OutputArray centroids,
//int connectivity = 8, 可为4或8连域 默认为8连域
//int ltype = CV_32S
//)
输入为二值图像,labels 里是每个区域的标记,stats 分别对应各个轮廓的外接矩阵的x,y,width,height和面积,centroids对应质心
Mat labels, stats, centroids;
int nccomps = connectedComponentsWithStats(midImg2, labels, stats, centroids); //可以得到连通域的个数
for (int i = 0; i <nccomps;i++) //注意 stats中第0个数据是背景色的信息
{
int x = stats.a