OpenCV不会加载图像

Posted

技术标签:

【中文标题】OpenCV不会加载图像【英文标题】:OpenCV wont load image 【发布时间】:2019-08-28 03:07:37 【问题描述】:

所以我链接了 OpenCV 的所有库,我已经添加了它工作所需的所有 .lib 和 .dll,但是当我去尝试获取图片以显示它时说图片不存在。所有路径都正确,图像在解决方案的主目录中,这是代码。

Mat color = imread("wall.jpg");

也试过了:

D:\\wall.jpgD:\wall.jpg

D:/wall.jpgD://wall.jpg


     #include<opencv2/opencv.hpp>
     #include<opencv2/imgcodecs.hpp>

      using namespace std;

      using namespace cv;
      int main()
      

    Mat color = imread("wall.jpg");
    if (color.empty())
    
        cout << "image is empty" << endl;
        system("pause");
        exit(-1);
    
    else
    
        cout << "image is displayed" << endl;
        imshow("window", color);
    



    waitKey();

    

代码输出

image is empty Press any key to continue . . .

应该说

image displayed

【问题讨论】:

【参考方案1】:

我的回答假设您使用的是 Windows,因为您在描述中使用了“解决方案”一词。

以下至少有一项是正确的:

您的路径不正确。如果您从 Visual Studio 运行代码,则使用 "wall.jpg" 之类的相对路径使用工作目录,该目录不一定是解决方案目录。 使用另一个机制来验证您的路径是否正确,例如在 Windows 上从命令行运行以下命令:start D:\wall.jpg。如果该命令返回文件未找到错误,则说明您的路径错误。 您正在使用不受支持的文件格式。 确保您可以打开并查看该文件。 确保它是 JPEG、TIFF 或 PNG。扩展名可能不正确。如果您不确定,请尝试使用您知道是其中一种类型的文件。 您没有读取该文件的权限。 打开文件并确认您可以查看它。如果可以,并且您的 opencv 进程以同一用户身份运行,则应该没问题。

来自imread docs:

从文件加载图像。

函数imread 从指定文件加载图像并返回。如果图像无法读取(由于缺少文件、权限不正确、格式不支持或无效),该函数返回一个空矩阵(Mat::data==NULL)。

...

在 Microsoft Windows* OS 和 MacOSX* 上,默认使用 OpenCV 图像随附的编解码器(libjpeg、libpng、libtiff 和 libjasper)。因此,OpenCV 始终可以读取 JPEG、PNG 和 TIFF。

...

注意

该函数根据内容而不是文件扩展名确定图像的类型。

命令行工作目录

如果从命令行运行,工作目录就是您所在的目录。如果您在操作系统上运行文件列表命令并且可以看到您的"wall.jpg" 图像,那么您来对地方了。使用 .\path\to\my\opencv-program.exe 之类的相对路径从此处运行您的 OpenCV 可执行文件。

Visual Studio 调试工作目录

【讨论】:

我做了你所有的建议,但仍然发现我有同样的问题。操作系统可以使用 D:\ 驱动器和程序文件中的路径很好地打开文件。该程序仍然无法打开此文件,我确认它是 jpeg。我确认操作系统可以从我的帐户打开它,我可以访问图像不知道还能做什么。 很奇怪。您可能想尝试进入 imread 以找出它失败的地方。您可能需要从源代码构建开放式 cv 来执行此操作。 github.com/opencv/opencv 我发现它适用于我的 Surface Pro,但不适用于我的桌面

以上是关于OpenCV不会加载图像的主要内容,如果未能解决你的问题,请参考以下文章

JAVA 图像处理基于OpenCv与JVM-----加载保存图像

JAVA 图像处理基于OpenCv与JVM-----加载保存图像

OpenCV 图像加载程序退出

OpenCV中原始图像加载与保存压缩技巧

为啥 OpenCV 加载图像的时间比 .NET 长得多?

opencv4opencv视频教程 C++(opencv教程)2加载,修改,保存图像