当我在Visual C++ 2005中编译我的Windows应用程序(称为CrosslinesDetection)时,包括计算机视觉库OpenCV 1.1,我没有收到任何编译或链接错误,但是当我运行它时,点并冻结,和Windows说以下内容:与OpenCV的奇怪行为
"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编译。如果我为上述线创建这样的解决方案,我在执行期间没有问题。
有没有人有想法,可能会导致这个错误?
感谢您的帮助,斯特凡
感谢您的意见。
同时,我使用最小的项目进行测试。
我还没有完全理解这个问题,但同时,我发现,当我包含第三方库(来自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();
}
而且我加了headeras在开始Form1.h的:
#include "CameraControl.h"
#include "cv.h"
然后,我不得不关闭预编译头文件选项,我必须从/ clr:pure更改为/ clr选项才能成功编译和链接项目。
但是,后来我跑我不知道该程序的上述异常被抛出...
,如果我错用C++ Windows窗体应用程序,我不应该inlcude我的纯C++代码或者如果真有OpenCV或uEye库的问题。
如果你在调试器中运行程序会发生什么? Visual Studio应该告诉你哪一行有访问冲突。 如果您只取消注释第一行,该怎么办?它仍然崩溃? – 2009-01-27 17:31:58