OpenCV + VS2010上未处理的异常

时间:2011-11-17 09:37:29

标签: c++ c visual-studio-2010 opencv

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

 IplImage* img = cvLoadImage("C:\\hello.jpg");
 cvNamedWindow("myfirstwindow");
 cvShowImage("myfirstwindow", img);

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

    cv::Mat image= cv::imread("boldt.jpg");
    cv::namedWindow("Image");
    cv::imshow("Image",image);

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

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

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

6 个答案:

答案 0 :(得分: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());
}

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

修改

好吧,如果崩溃仍然发生,则意味着可能是cv::namedWindow()cv::imshow()错误,my money is on cv::namedWindow()

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

OpenCV 2.2 Windows XP MinGW build crashes on namedWindow, imshow

Open CV crashes under WIN7 when opening NamedWindow

namedWindow() causes crash in opencv 2.3.1? (Eclipse+MinGW on XP, C++)

似乎to solve the problem you need to disable SSE优化。

答案 1 :(得分:3)

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

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

答案 2 :(得分:1)

您是否检查过imread()函数的输出?

if(image.empty())
{
        cout << "where's my image?" << endl;
        return 0;
}

答案 3 :(得分:1)

我遇到了与上述问题完全相同的问题。

事实证明,问题在很大程度上取决于链接器的设置!

我在另一个帖子中找到了答案: OpenCV 2.3 and Visual Studio 2010

这是:

“项目的属性(右键单击它)

  • C / C ++
    • 一般
      • 包含目录添加&lt;你的目录&gt; \ OpenCV2.3 \ include \ opencv2,&lt;你的目录&gt; \ OpenCV2.3 \ include \ opencv和&lt;您的目录&gt; \ OpenCV2.3 \ include
  • 链接器

    • 一般
      • 列表项
    • 输入
      • 添加所有libs,例如opencv_core230d.lib opencv_highgui230d.lib等......“

一旦我完成了上述操作,我就可以无缝地运行imshow和imread +所有其他cpp函数!提出这个问题的作者可能已经解决了这个问题。但是,以防其他人被带到这里寻找相同的解决方案!

喝彩!

答案 4 :(得分:0)

确保在路径中添加了“C:\ OpenCV2.4.3 \ build \ x86 \ vc10 \ bin”。 NOT(!)“C:\ OpenCV2.4.3 \ build \ x86 \ vc9 \ bin”。这可能会导致问题。

对于opencv与visual studio的使用,有两个非常好的文档:

Viual Studio 2010 and OpenCV-2-4-x

The official OpenCv-Documentation

答案 5 :(得分:0)

签入生成编译的文件夹,因为其中一个是.exe编译的,并且您可能想要打开的图像不在那里。在我的情况下,.exe(在Debuge模式下)位于C:\ Users \ Name \ source \ repos \ HolaMundox \ x64 \ Debug中,而不是我在C:\ Users \ Name \ source上创建我的.cpp \ \回购HolaMundox。类似的东西将适用于发布模式。 另外一点是你必须检查图像的扩展名,如果它是.jpg,.jpeg,.bmp等等...我遇到的一个错误就是我把extencióngan.gand。它是.jpeg