是否有一种访问cv :: connectedComponents标记的特定区域的好方法?例如,我已经在二进制图像中识别出三个区域的白色区域,并且它们被标记为1,2,3。如何仅在标记为2的区域上进行计算(例如,在一个方向上的方差)?
答案 0 :(得分:2)
你应该使用cv :: connectedComponentsWithStats。然后,您可以遍历每个标签并使用CC_STAT_LEFT,CC_STAT_TOP,CC_STAT_WIDTH和CC_STAT_HEIGHT来获取每个区域的边界框。更多信息:https://github.com/Itseez/opencv/blob/master/modules/imgproc/src/connectedcomponents.cpp
从链接中提取:
for(int l = 0; l < (int) nlabels; ++l){
int *row = (int *) &statsv.at<int>(l, 0);
row[CC_STAT_LEFT] = INT_MAX;
row[CC_STAT_TOP] = INT_MAX;
row[CC_STAT_WIDTH] = INT_MIN;
row[CC_STAT_HEIGHT] = INT_MIN;
row[CC_STAT_AREA] = 0;
}