[英]Strange behavior with OpenCV
当我在包含OpenCV 1.1(一种计算机视觉库)的Visual C ++ 2005中编译我的Windows应用程序(称为CrosslinesDetection)时,我没有得到任何编译或链接错误,但是当我运行它时,它会停滞并冻结,并且Windows说以下内容:
"Unhandled exception at 0x7c915223 in CrosslinesDetection.exe:
0xC0000005: Access violation writing location 0x00030ffc."
该程序是常见的C ++ Windows应用程序,带有两行OpenCV代码:
IplImage *img = cvCreateImage( cvSize( 1024, 768 ), IPL_DEPTH_8U, 1 );
cvReleaseImage( &img );
现在,奇怪的行为是,如果我-包含OpenCV行,程序将引发异常-排除OpenCV行,则程序将正常运行。
我在另一个项目中使用了OpenCV库,没有任何问题。 特别是,我为GUI创建了一个C#项目,并在后台为DLL编译了一个C ++项目。 如果我为上述代码行创建了这样的解决方案,那么在执行过程中就不会有问题。
有谁知道,什么可能导致此错误?
感谢您的帮助,斯特凡
感谢您的评论。
同时,我使用一个最小的项目进行测试。
我仍然不完全理解这个问题,但与此同时,我发现,当我包含第三方库(来自uEye)时,就会发生这种情况。
如果我使用来自OpenCV和项目中的uEye库的单个函数,则会发生异常。 如果我使用来自OpenCV或uEye的单个函数,则不会引发任何异常。 因此,这些似乎与库不兼容,或者还有另一个问题。 但是,我不知道如何检测到它。
不,现在不行。 在最小的示例中,功能无关。 一个功能初始化相机,另一个功能初始化图像结构。
但是也许错误在其他地方...
我在Visual Studio中创建了一个C ++ Windows窗体应用程序。 我在Form1.h文件中向表单添加了一个按钮以及相应的功能:
private: System::Void Form1_Click(System::Object^ sender, System::EventArgs^ e) {
OpenCamera();
IplImage * img = cvCreateImageHeader( cvSize( 1024, 768 ), IPL_DEPTH_8U, 1);
cvReleaseImage( &img );
CloseCamera();
}
我在Form1.h的开头添加了headeras:
#include "CameraControl.h"
#include "cv.h"
然后,我必须关闭预编译的头文件选项,并且必须从/ clr:pure更改为/ clr选项,才能成功编译和链接项目。
但是,然后我运行程序,抛出了上述异常...
我想知道,如果我滥用C ++ Windows窗体应用程序,并且不应该包含纯C ++代码,或者OpenCV或uEye库是否确实存在问题。
我建议在没有托管代码的情况下在本机项目中测试相同的代码。 MFC或Win32控制台应用程序。
是不是
cvReleaseImage( img );
? (和号已删除)另外,您还应该检查正确的调用约定。
我只是使用OpenCV 1.0和Visual Studio 2008运行并编译了这些确切的行,没有错误。 也许尝试创建一个空项目,该空项目除了包含cxcore.h标头外什么都不做,然后运行这两行。
只是对其他海报者来说:没有&符是规范的一部分,他是正确的。 抱歉,我将其发布为评论,但还不能。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.