我正在使用 OpenCV 开发一个简单的背景减法程序BackgroundSubtractorMOG2
。代码:
int main()
{
VideoCapture cap(0); // open the default camera
if(!cap.isOpened()) // check if we succeeded
return -1;
Mat frame,foreground,image,edges;
BackgroundSubtractorMOG2 mog;
namedWindow("Capture", CV_WINDOW_AUTOSIZE);
namedWindow("Contours", CV_WINDOW_AUTOSIZE);
while(1)
{
cap >> frame; // get a new frame from camera
if( frame.empty() )
break;
image=frame.clone();
mog(frame,foreground,-1);
threshold(foreground,foreground,1,250,THRESH_BINARY);
medianBlur(foreground,foreground,9);
erode(foreground,foreground,Mat());
dilate(foreground,foreground,Mat());
imshow( "Capture",image );
imshow("Contours",foreground);
if(waitKey(30) >= 0) break;
}
}
该程序可以运行,但退出时会出现如下错误:Unhandled exception at 0xfeeefeee in {prog_name}.exe: 0xC0000005: Access violation reading location 0xfeeefeee.
它将指向crtexe.c
第 568 行:
if (has_cctor == 0)
_cexit();
知道是什么导致了问题吗?提前致谢。
PS:目前使用 OpenCV 2.3.4 和 VS C++ 2010 Exp。在 Windows XP 上。
PSS:AFAIK 每个类/指针(包括相机)将在退出时被取消初始化/销毁。如果我错了,请纠正我。
Updates(1):即使在其中添加了一些行之后,仍然出现错误。
更新(2):为每一行尝试了调试,仍然一无所获。尝试delete
了释放资源的函数,但找不到任何指针来使用它delete
。
更新(3):似乎我使用的每个视频处理程序OpenCV C++
都会在退出时崩溃,即使是我从书籍/互联网复制粘贴的程序也是如此。更改break
为return -1
,仍然崩溃...
更新(4):我在另一台 PC(MS VS 2010 Pro,Windows Vista 64b)上尝试了我的程序,猜猜是什么,没有崩溃。肯定是我电脑设置有问题...