感谢你关注这个问题。
我想使用Kinect传感器检测一些移动物体。这个想法很简单,首先我会得到每两帧之间的差异图像,然后提取对象的轮廓,最后做进一步的处理。
我尝试使用Opencv(版本2.4.9)函数findContours
来提取轮廓,但问题来了。该函数可以在每个循环中提取大约30或40个轮廓,但在每个轮廓中,轮廓中包含大约数十亿个点。另外,如果我想使用drawContours
或minAreaRect
等函数,程序将因内存错误而崩溃。
以下是相关代码:
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点(而其他正常)
有人可以对此有所了解吗?