c++ - OpenCV 的奇怪行为

标签 c++ visual-studio-2005 opencv

当我在 Visual C++ 2005(包括计算机视觉库 OpenCV 1.1)中编译我的 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# 项目,并在后台将 C++ 项目编译为 DLL。如果我为上述几行创建这样的解决方案,我在执行过程中没有问题。

有没有人知道什么可能导致这个错误?

感谢您的帮助,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 的开头添加了标题:

#include "CameraControl.h"
#include "cv.h"

然后,我必须关闭预编译 header 选项,并且必须从/clr:pure 更改为/clr 选项才能成功编译和链接项目。

但是,然后我运行程序抛出上述异常...

我想知道,如果我误用了 C++ Windows 窗体应用程序并且我不应该包含我的纯 C++ 代码,或者 OpenCV 或 uEye 库是否真的存在问题。

最佳答案

我建议在没有托管代码的 native 项目中测试相同的代码。 MFC 或 Win32 控制台应用程序。

关于c++ - OpenCV 的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/483199/

相关文章:

c++ - 第一次使用socket编程。连接没有发生。

c++ - std::vector insert 的行为与我预期的不同。这是一个错误吗?

visual-studio - 安装ReSharper后Visual Studio 2005 Intellisense停止工作

OpenCV 空间匹配(Beyond Bags of Featues,Lazebnik)

python - 向 OpenCV 生成的视频添加音频

c++ - 404更新文件请求结果

c++ - 如何仅在 C++ 中比较其他字段的对?

visual-studio-2005 - 使用 VSS 自动构建

visual-studio-2008 - 将 2005 年转换为 2008 年,System.Core 项目问题

python - 如何在opencv中获取旋转椭圆主轴的起点和终点坐标(x,y)?