findContours用于blob查找

时间:2013-06-08 17:04:13

标签: opencv image-processing

我正在使用OpenCV的findContours()进行斑点搜索,通过在轮廓中的任意种子点进行填充并获取填充的边界矩形。但是,当两个斑点碰到角落时,例如

enter image description here

它们共享一个轮廓,因此根据选择的种子点,只有两个斑点中的一个将被填充。

我可以将Floodfill连接设置从4更改为8,以便blof在Floodfill中融合。我真正想做的是忽略小缺陷,只计算大块。这可以在不显着改变算法的情况下完成吗?

2 个答案:

答案 0 :(得分:2)

与floodfill不同,在OpenCV中无法使用具有4连接功能的findContours。

答案 1 :(得分:0)

您应该查看findContours() documentation

findContours如果出现在图片中,可以返回多个轮廓,在您的情况下,如果您选择4连接,则应该得到2 contours,然后您可以将它们的边界框大小与决定保留哪一个。

cv::Mat img = cv::imread('test.png', 0);
std::vector<std::vector<cv::Point> > contours;
std::vector<cv::Vec4i> hierarchy;
cv::findContours(img, contours, hierarchy, CV_RETR_EXTERNAL, CV_CHAIN_APPROX_SIMPLE);
for (size_t i = 0;i < contours.size(); ++i) {
   cv::Rect bbox = cv::boundingRect(contours[i]);
   std::cout<<"Contour"<<i<<" Area"<<bbox.area()<<std::endl;
}

希望这有帮助。