OpenCV的奇怪行为

时间:2009-01-27 12:20:45

标签: c++ visual-studio-2005 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 Applikation,带有两行OpenCV代码:

IplImage *img = cvCreateImage( cvSize( 1024, 768 ), IPL_DEPTH_8U, 1 );
cvReleaseImage( &img );

如果我,现在是奇怪的行为 - 包括OpenCV行,该程序抛出异常 - 排除OpenCV行,程序正常运行。

我在另一个项目中使用OpenCV库没有任何问题。特别是,我为GUI创建了一个C#项目,并在后台编译为DLL的C ++项目。如果我为上述行创建了这样的解决方案,那么在执行期间我没有问题。

有人有想法,可能会导致此错误吗?

感谢任何帮助,Stefan


感谢您的评论。

与此同时,我使用一个最小的项目进行测试。

我仍然不完全理解这个问题,但同时,我发现,当我加入第三方库(来自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库确实存在问题。

3 个答案:

答案 0 :(得分:1)

我建议在本机项目中测试相同的代码,而不使用托管代码。 MFC或Win32控制台应用程序。

答案 1 :(得分:0)

不是吗

cvReleaseImage( img );

? (去掉了&符号) 你还应该检查正确的调用约定。

答案 2 :(得分:0)

我刚刚使用OpenCV 1.0和Visual Studio 2008运行并编译了这些确切的行,没有错误。也许尝试创建一个空项目,除了包含cxcore.h头之外什么都不做,然后运行这两行。

另外只是另一张海报:没有&符号是规范的一部分,他在那里是正确的。对不起,我会将此作为评论发布,但还不能。