繁体   English   中英

OpenCV的奇怪行为

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM