在Opencv findContours函数检测到的轮廓中发现了太多的点

时间:2015-07-22 10:17:47

标签: opencv image-processing kinect

感谢你关注这个问题。

我想使用Kinect传感器检测一些移动物体。这个想法很简单,首先我会得到每两帧之间的差异图像,然后提取对象的轮廓,最后做进一步的处理。

我尝试使用Opencv(版本2.4.9)函数findContours来提取轮廓,但问题来了。该函数可以在每个循环中提取大约30或40个轮廓,但在每个轮廓中,轮廓中包含大约数十亿个点。另外,如果我想使用drawContoursminAreaRect等函数,程序将因内存错误而崩溃。

以下是相关代码:

    findContours(Black, contours, hierarchy, CV_RETR_TREE, CV_CHAIN_APPROX_SIMPLE, 
    Point(0, 0));

//1. If nothing has entered the camera frame, skip
    if(contours.size()==0)
    {
        //cout<<"NoContours ";
        continue;
    }

//2. Only save the maximum contour(index) as the result 
    max_index = 0;
    for (size_t i = 1; i < contours.size(); i++)
    {
        //cout << " Num of Points: " << contours[i].size() << endl;
        if(contours[max_index].size() < contours[i].size())
        {
            max_index = int(i);
        }
    }

//3. If the maximum contour's size is smaller than 5, regard it as noise
    //cout << contours[max_index].size() << endl;
    if(contours[max_index].size() < 5)
    {
        continue;
    }

//find a smallest RotatedRect to express the contour(error happen)
    minRect = minAreaRect(Mat(contours[max_index]));
    RotatedRect minEllipse = fitEllipse(contours[max_index]);

运行到最后两行代码时会发生错误。我认为函数findContours在每个轮廓中找到太多点的主要原因是导致内存不足。

我暂时无法发送图像,但函数findContours在至少50%的轮廓中发现约4294966890点(而其他正常)

有人可以对此有所了解吗?

1 个答案:

答案 0 :(得分:3)

尝试使用approxpolydp来简化轮廓。