尽管在 openCV 4.0.0 中正确寻址,imread() 仍然返回空垫

Posted

技术标签:

【中文标题】尽管在 openCV 4.0.0 中正确寻址,imread() 仍然返回空垫【英文标题】:imread() still returns empty mat despite correct addressing in openCV 4.0.0 【发布时间】:2018-10-12 15:59:49 【问题描述】:

我是 OPENCV 的新手。 现在我正在尝试使用 imread() 显示图像,但 imread() 不起作用(继续返回空垫。)但是当我尝试通过 imread() 绘制线条、圆圈等时,效果很好。

所以我认为寻址会有问题。我尽我所能,但它仍然不起作用。 而且我也用谷歌搜索了很多东西来解决它,但我无法得到这个问题的任何答案。

我该怎么办?我错过了什么吗?

我目前使用的是 Windows 10、Visual Studio 2017 和 openCV 4.0.0 alpha。

这是我的代码。

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

#ifdef _DEBUG
#pragma comment(lib,"opencv_world400d.lib")
#else
#pragma comment(lib,"opencv_world400.lib")
#endif

using namespace std;
using namespace cv;

int main()

    Mat image;
    image =imread("C:/Users/ymin/source/repos/Project1/Project1/BENZ.bmp",IMREAD_ANYCOLOR);
    if (image.empty()) 
    std::cerr << "Could not open file" << std::endl; return (1);
    imshow("image", image);
    waitKey();

    return 0;


【问题讨论】:

你确定图片不是全黑的,而且它是有效的“bmp”格式吗? 其实第一个只是从png转bmp。我还以为那张图有问题。所以我用基本上安装在 Windows 中的绘图工具制作了另一个测试图像。我只是在白色背景中画了一个黑色圆圈,并将其保存为 256 像素 bmp 格式。但它不起作用...... 【参考方案1】:

来自OpenCV documentation for imread

如果无法读取图像(由于缺少文件、权限不正确、格式不支持或无效),该函数返回一个空矩阵。

这表明该文件不存在(可能是拼写错误?),您无权读取它,它的格式无法被 OpenCV 识别,或者它已损坏。

确保文件在您认为的位置,并且它是可读的,并且 OpenCV 已编译为支持文件的任何格式。

(请注意,文件扩展名并不决定其格式,您可以取一个 JPEG 文件并将其重命名为具有.bmp 扩展名,但它仍然是一个 JPEG 文件。)

【讨论】:

没有权限是什么意思?我是否必须在 VS 中设置一些权限才能使图像文件对 openCV 可读?对不起我的无知。 @추영민:不。如果文件属于一个用户,操作系统可能不会让其他用户读取文件。文件权限是文件的属性。如果它是您的文件,并且您可以读取它,那么您运行的程序也应该被允许读取它。但当一台计算机上有多个用户帐户时,需要考虑这一点。 @추영민: 你确定Windows下正斜杠没问题吗?文件路径通常用反斜杠写在那里。好久没用Windows了,不知道现在能不能用。检查一下! 嗯...我的电脑中只有一个帐户(当然是我的)。所以似乎许可不是问题。我听说正斜杠效果很好。但为了以防万一,我把所有的正斜杠都改成了反斜杠。像这样 "C:\\Users\\ymin\\source\\repos\\Project1\\Project1\\BENZ.bmp" 但结果是一样的。 感谢您的回答。我刚刚卸载了 openCV 4.0.0 并在 3.4.1 版本中再次安装,然后它运行良好。可能版本 4.0.0 有问题,因为它仍然是 alpha 版本。但我不知道它不起作用的确切原因。无论如何,我很感激你的好意:)

以上是关于尽管在 openCV 4.0.0 中正确寻址,imread() 仍然返回空垫的主要内容,如果未能解决你的问题,请参考以下文章

VoLTE基础自学系列 | IMS网络中的IP层路由寻址过程(注册流程中的实现)

如何使用opencv python在闭合曲线中正确填充颜色

Opencv和python获取文档正确的轮廓并在图像上绘制

OpenCV 中的边缘检测

如何使用 OpenCV 在 C++ 中实现高效的 im2col 函数?

尽管在 ROS 中有其他版本的 OpenCV 版本,我如何引用独立的 OpenCV 安装