在我的项目中,我使用 cvFindContours 来检测对象。使用结果,我想标记输入图像的 roi(如果检测到的 blob 之间的距离很高,我想迭代 roi 的标记)。
我的问题是,找到的 blob 中的一些矩形是重叠的,或者是更大 blob 的一部分。是否有一种快速的解决方案来移除内部斑点并以最小距离合并斑点?
例如:
您可以使用cv::Rect 的 operator&检查矩形是否重叠:
cv::Rect a(x1,y1,w1,h1);
cv::Rect b(x2,y2,w2,h2);
cv::Rect intersect = a&b; // if intersect is not empty, the rect overlaps
至于你的“最小距离”,没有办法使用标准的 opencv 函数来做到这一点。您必须确定矩形之间的“距离”是多少:它们的中心之间的距离(不推荐)?他们的边界之间的距离?然后提醒你有 2 个维度。你可以做到,但你必须自己编码。