OpenCV + VS2010上未处理的异常

Zom*_*bia 5 c c++ opencv visual-studio-2010

我可以成功构建并执行以下代码:

 IplImage* img = cvLoadImage("C:\\hello.jpg");
 cvNamedWindow("myfirstwindow");
 cvShowImage("myfirstwindow", img);
Run Code Online (Sandbox Code Playgroud)

但是在执行下面的代码时我得到了未处理的异常:

    cv::Mat image= cv::imread("boldt.jpg");
    cv::namedWindow("Image");
    cv::imshow("Image",image);
Run Code Online (Sandbox Code Playgroud)

虽然,我可以成功构建代码.

我在Windows 7 x86版本上使用opencv2.2和VS2010 x86版本.请帮忙 !

更新:我在winxp上尝试过,它工作正常......只有在发布模式下win7才能正常工作.

kar*_*lip 5

这可能是人们没有意识到当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());
}
Run Code Online (Sandbox Code Playgroud)

这种编程实践将为您节省大量时间.

编辑:

好了,如果崩溃仍然发生这意味着它可以是cv::namedWindow()cv::imshow()错,我的钱是cv::namedWindow().

其他用户在Windows上报告了类似的行为:

OpenCV 2.2 Windows XP MinGW构建在namedWindow上崩溃,即imsh​​ow

打开NamedWindow时,在WIN7下打开CV崩溃

namedWindow()导致opencv 2.3.1崩溃?(Eclipse + MinGW on XP,C++)

似乎要解决问题,您需要禁用SSE优化.

  • 更新了答案!这可能是 [Windows 上 OpenCV 的已知错误](https://code.ros.org/trac/opencv/ticket/583)。 (2认同)

Ben*_*Ben 3

我正在使用 OpenCV 2.3.1,当我在发布模式下运行它时(链接到发布的 highgui 库),一切都很好。当我切换到调试模式(仍然链接到发布的 highgui 库)时,它崩溃了。链接到调试 highgui 库有帮助。

也许你也有同样的问题...

  • 在 vc10 中将项目的调试和发布 .libs 分开..解决了我的问题 (2认同)