The program我正在研究的是一种轮廓检测程序,它可以过滤捕获帧中最大的轮廓,用红色绘制它并打印出对象的中心坐标。有时当我调试程序时,我收到此错误消息:
OpenCV Error: Null pointer (NULL array pointer is passed) in unknown function, file ......../array.cpp line 2382
我已经搜索了问题的来源并发现第一个(和以下)捕获的帧是否没有检测到轮廓(轮廓为NULL),程序将崩溃。到目前为止,我还没有找到任何解决办法让这个程序忽略错误,直到检测到至少一个轮廓。那么关于如何阻止这个问题发生的任何线索呢?
提前致谢。干杯
P / S:检测到轮廓后,程序运行正常。目前正在使用OpenCV 2.4.2
答案 0 :(得分:1)
我建议,如果找不到轮廓,就会忘记处理帧。
cvFindContours( src_gray, storage, &contours, sizeof(CvContour),
CV_RETR_EXTERNAL, CV_CHAIN_APPROX_NONE, cvPoint(0,0));
if(contours==NULL)
continue;
答案 1 :(得分:1)
在此代码中:
CvSeq* largest_contour = NULL;
...
while (current_contour != NULL){
double area = fabs(cvContourArea(current_contour,CV_WHOLE_SEQ, false));
if(area > largestArea){
largestArea = area;
largest_contour = current_contour;
}
current_contour = current_contour->h_next;
}
...如果largest_contour
开始成为NULL
并且current_contour
没有“保存优惠”,那么最终NULL
等于contours2
(在处理开始时也是NULL
)。
稍后,contours
NULL
无关紧要,因为contours2
被largest_contour
“恢复”,正如您所注意到的那样
检测到轮廓后,程序将正常工作
但是在第一帧,这不可能发生。
然后,NULL
永远不会更改其初始cvMoments(largest_contour, &moments, 1);
值。
我怀疑这不符合以下几行:
if (largest_contour)
cvMoments(largest_contour, &moments, 1);
else
continue; // loop to next frame
我将在
中修改{{1}}