前面的博客有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;