1

所以我链接了 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

4

1 回答 1

0

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

以下至少一项是正确的:

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

imread 文档

从文件加载图像。

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

...

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

...

笔记

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

命令行工作目录

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

Visual Studio 调试工作目录

Visual Studio 中的工作目录

于 2019-08-28T04:50:41.160 回答