尽管在 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层路由寻址过程(注册流程中的实现)