OpenCV + VS2010上未处理的exception
我可以成功构建并执行以下代码:
IplImage* img = cvLoadImage("C:\\hello.jpg"); cvNamedWindow("myfirstwindow"); cvShowImage("myfirstwindow", img);
但是在执行下面的代码时我得到了未处理的exception:
cv::Mat image= cv::imread("boldt.jpg"); cv::namedWindow("Image"); cv::imshow("Image",image);
虽然,我可以成功构建代码。
我在Windows 7 x86版本上使用opencv2.2和VS2010 x86版本。 请帮忙 !
更新:我在winxp上尝试过它,它工作正常……它只适用于发布模式下的win7。
我正在使用OpenCV 2.3.1,当我在发布模式下运行它(链接到发布的highgui lib)时,一切都很好。 当我切换到调试模式(仍然链接到发行版highgui lib)时,它崩溃了。 链接到调试highgui lib有帮助。
也许你有同样的问题……
这可能是人们没有意识到当VStudio运行你的应用程序时它试图在与编译的可执行文件相同的目录中找到它的资源而不是在源文件所在的文件夹中的问题。
您的第一个代码有效,因为您正在加载通过FULL PATH传递给文件的图像!
这就是为什么在编码时检查函数是否成功非常重要的原因:
try { cv::Mat image = cv::imread("boldt.jpg"); if (!image.data) printf("!!! No data !!!"); } catch(std::exception e) { printf("Exception: [%s]\n", e.what()); }
这种编程实践将为您节省大量时间。
编辑 :
好吧,如果崩溃仍然发生,这意味着它可能是cv::namedWindow()
或cv::imshow()
错误, 我的钱是在cv::namedWindow()
。
其他用户在Windows上报告了类似的行为:
OpenCV 2.2 Windows XP MinGW构建在namedWindow上崩溃,即imshow
打开NamedWindow时,在WIN7下打开CV崩溃
namedWindow()导致opencv 2.3.1崩溃? (Eclipse + MinGW on XP,C ++)
似乎要解决问题,您需要禁用SSE优化。
你检查过imread()函数的输出了吗?
if(image.empty()) { cout << "where's my image?" << endl; return 0; }
我有与之前描述的完全相同的问题。
事实certificate,问题非常在于链接器的设置!
我在另一个post中找到了答案: OpenCV 2.3和Visual Studio 2010
这里是:
“项目的属性(右键单击它)
- C / C ++
-
- 一般
-
-
- include目录添加
\ OpenCV2.3 \ include \ opencv2, \ OpenCV2.3 \ include \ opencv和 \ OpenCV2.3 \ include
- include目录添加
-
-
链接
-
- 一般
-
-
- 项目清单
-
-
- 输入
-
-
- 添加所有libs,比如opencv_core230d.lib opencv_highgui230d.lib等……“
-
一旦我完成了上述操作,我就可以无缝地运行imshow和imread +所有其他cpp函数! 提出这个问题的作者可能已经解决了这个问题。 但是,以防万一有其他人在这里寻找相同的解决方案!
干杯!
确保在路径中添加了“C:\ OpenCV2.4.3 \ build \ x86 \ vc10 \ bin”。 NOT(!)“C:\ OpenCV2.4.3 \ build \ x86 \ vc9 \ bin”。 这可能会导致问题。
对于opencv与visual studio的使用,有两个很好的文档:
Viual Studio 2010和OpenCV-2-4-x
官方OpenCv文档
检入生成编译的文件夹,因为其中一个是.exe编译的,并且您可能想要打开的图像不存在。 在我的情况下,.exe(在Debuge模式下)位于C:\ Users \ Name \ source \ repos \ HolaMundox \ x64 \ Debug中,而不是我在C:\ Users \ Name \ source上创建我的.cpp \ \回购HolaMundox。 类似的东西将适用于发布模式。 另外一点是你必须检查图像的扩展名,如果它是.jpg,.jpeg,.bmp等等……我遇到的一个错误就是我把extencióngan.gand。它是.jpeg 。