"空指针已通过",用于检测轮廓
"NULL pointer is passed" for detecting contours
我正在开发的程序是一个轮廓检测程序,它过滤捕获帧中最大的轮廓,用红色绘制并打印出对象的中心坐标。有时当我调试程序时,我收到以下错误消息:
OpenCV Error: Null pointer (NULL array pointer is passed) in unknown function, file ......../array.cpp line 2382
我已经搜索了问题的根源,并发现如果第一个(和下一个)捕获的帧中没有检测到轮廓(轮廓为 NULL),程序将崩溃。到目前为止,我还没有找到任何解决方案可以使该程序忽略错误,直到至少检测到轮廓。那么关于如何阻止这个问题发生的任何线索?
提前谢谢。干杯
P/S:检测到轮廓后,程序将正常工作。当前使用 OpenCV 2.4.2
我建议,如果你找不到轮廓,就忘记处理框架。
cvFindContours( src_gray, storage, &contours, sizeof(CvContour),
CV_RETR_EXTERNAL, CV_CHAIN_APPROX_NONE, cvPoint(0,0));
if(contours==NULL)
continue;
在此代码中:
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;
}
。如果current_contour
开始成为自身NULL
并且没有来自contours2
的"救赎恩典"(本身也在处理开始时也NULL
),则最终可能会得到等于NULL
largest_contour
。
后来,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
相关文章:
- 使用CMake检测支持的C++标准
- 当套接字连接断开时检测C/C++Unix
- C/C++预处理器是否可以检测一些编译器选项
- WMI检测进程创建事件-c++
- 基于树莓pi的tensorflow lite量化ssd目标检测
- 下面是我为检测链接列表中的循环而制作的代码
- 落砂模拟碰撞检测C++和SFML
- 我可以检测和更改 gcc/g++ 中结构的当前数据对齐设置吗?
- 为什么C++编译器没有检测到正确声明的类?
- 检测win32服务创建和删除的最佳方法
- 正在LLVM中检测整数比较条件
- 如何在鼠标挂钩过程中检测拖动
- 位移操作和位掩码未检测到重复字符
- 检测 COFF 对象文件中C++内联符号
- "空指针已通过",用于检测轮廓
- 如何匹配轮廓来检测图像上字母的ASCII
- 从Blob检测中提取OpenCV轮廓阵列
- 图像轮廓检测错误:OpenCV,C++
- 在OpenCV中检测轮廓之间的虚线
- 我如何计算手指的数量?(openCV +轮廓检测)