搜索轮廓是否存在于另一个轮廓内

时间:2016-05-15 15:05:05

标签: c++ opencv image-processing opencv-contour

我在openCV中将两个轮廓矢量OUTERCONT和INNERCONT定义为矢量(矢量(点))。我想检查一个轮廓是否存在于另一个轮廓内。我还想知道每个OUTERCONT内部存在多少个轮廓。 我目前正在围绕每个轮廓绘制一个minEnclosingRect并检查以下内容:

for (int i = 0; i < outerrect.size(); i++)
{
    count = 0;
    for (int j = 0; j < innerrect.size(); j++)
    {
        bool is_inside = ((innerrect[j] & outerrect[i]) == innerrect[j]);
        if (is_inside == 1)
            count++;

    }
    if (count > 0)
    {
       //DO SOMETHING 
    }
    cout << count << endl;

这似乎不起作用,它总是将计数返回到120左右的某个数字,这是不对的。您能否建议进行任何更改以使其正常工作?

注意:我不能使用层次结构,因为它们是从2个不同函数返回的两组独立轮廓。

我知道PointPloygon测试是一个选项,但你能建议更多的方法吗?

1 个答案:

答案 0 :(得分:1)

以下是我的意见:

return response('OK', 200);

此代码将从这两个图像中创建两组轮廓:

enter image description here

enter image description here

计算轮廓遮罩并进行比较。

每个轮廓将显示

结果。黑色轮廓是参考,绿色是完全在参考范围内的,紫色是相交的轮廓。

我正在使用此图片绘制结果:

enter image description here

获得这些结果:

contour1:

enter image description here

轮廓2:

enter image description here

contour3: enter image description here

contour4: enter image description here

contour5: enter image description here

如您所见,未检测到孤独的黄色轮廓相交或包含在任何红色轮廓中。