我正在使用OpenCV的findContours()
进行斑点搜索,通过在轮廓中的任意种子点进行填充并获取填充的边界矩形。但是,当两个斑点碰到角落时,例如
它们共享一个轮廓,因此根据选择的种子点,只有两个斑点中的一个将被填充。
我可以将Floodfill连接设置从4更改为8,以便blof在Floodfill中融合。我真正想做的是忽略小缺陷,只计算大块。这可以在不显着改变算法的情况下完成吗?
答案 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;
}
希望这有帮助。