【问题标题】:load image with openCV Mat c++使用openCV Mat c ++加载图像
【发布时间】:2013-04-13 03:11:50
【问题描述】:

我想在 openCV 中使用 Mat 加载图像

我的代码是:

Mat I = imread("C:/images/apple.jpg", 0);
namedWindow( "Display window", CV_WINDOW_AUTOSIZE );// Create a window for display.
imshow( "Display window", I ); 

我在消息框中收到以下错误:

Unhandled exception at 0x70270149 in matching.exe: 0xC0000005: Access violation 
reading location 0xcccccccc.

请注意,我包括:

#include <cv.h>
#include <cxcore.h>
#include <highgui.h>
#include <iostream>
#include <math.h>

【问题讨论】:

    标签: c++ opencv mat loadimage


    【解决方案1】:

    你有没有在imread之后检查我是否存在?可能是文件读取失败

    读取文件后,请if ( I.empty() ) 检查是否失败

    【讨论】:

    • @Martin Beckett 是的,链接 C:/images/apple.jpg 中有图片“apple.jpg”
    • 是的,但是“I.empty()”返回什么?您可能没有权限,文件可能已损坏,您可能没有 jpeg.dll 等 etcv
    • @Martin Beckett 我收到了上述错误 - 可能是我没有库或者我错误地执行了包含。请帮帮我。
    【解决方案2】:

    我不知道你为什么没有包含问题,因为通常它是 .hpp 文件,所以你应该这样做

    #include <opencv2/highgui/highgui.hpp>
    #include <opencv2\core\eigen.hpp>
    

    但您的代码看起来不错,但在您的 imshow 后添加 cv::waitKey(0);

    【讨论】:

    • 正如@Martin Beckett 所说,可能只是因为 C:/Images/apple 不存在所以你的 Mat 是空的。 if(!I.empty()) 也是如此。
    • @Alexandre Bizeau 当我复制并粘贴您的包含时,我收到此错误“致命错误 C1083:无法打开包含文件:'opencv2/highgui/highgui.hpp'”
    • 不一定完全复制我放的内容,因为您的包含目录可能​​未设置为我的。正如我所看到的那样。您可能只需要执行#include 或#include 。取决于您如何设置文件夹和项目属性
    【解决方案3】:

    我之前已经talked 讨论过这个so many times,我想再次这样做是没有意义的,但是防御性代码:如果方法/函数调用可能失败,请确保你知道什么时候它发生了:

    Mat I = imread("C:\\images\\apple.jpg", 0);
    if (I.empty())
    {
        std::cout << "!!! Failed imread(): image not found" << std::endl;
        // don't let the execution continue, else imshow() will crash.
    }
    
    namedWindow( "Display window", CV_WINDOW_AUTOSIZE );// Create a window for display.
    imshow( "Display window", I ); 
    waitKey(0);
    

    请注意,Windows 的路径使用反斜杠 \,而不是 *nix 系统上使用的标准 /。传递文件名时需要转义反斜杠:C:\\images\\apple.jpg

    Calling waitKey() is mandatory if you use imshow().

    编辑

    如果是cv::imread() 抛出异常我知道唯一可行的解​​决方案是下载 OpenCV 源代码并在机器上构建它,因为重新安装 OpenCV 并不能解决问题。

    【讨论】:

    • @karlphillip - 即使你的回答我也有同样的问题。
    • matching.exe 中 0x70270149 处未处理的异常:0xC0000005:访问冲突读取位置 0xcccccccc。(显示在消息框中)
    • 如果是cv::imread() 我以前见过这种异常被抛出。唯一的解决方案是下载 OpenCV 源代码并在机器上编译它。重新安装 OpenCV 并没有解决问题。
    • @karlphillip 如果我们想从不同的文件夹中读取许多图像,我们应该怎么做?
    • @Wish_2_fly 如果我们想存储几个不同的数字,我们如何在程序中做到这一点? int n1 = 10; int n2 = 20; int n3 = 30; ...
    【解决方案4】:

    您是否使用 Visual Studio 2010 来运行 OpenCV 代码?如果是这样,请尝试在 Release 模式下编译。

    【讨论】:

      【解决方案5】:

      正如@karlphillip 所指出的,尽管这听起来微不足道,但这条语句“传递文件名时需要转义反斜杠:C:\images\apple.jpg”非常重要。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-05-24
        • 2018-03-19
        • 2015-04-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多