OpenCV不会加载图像
Posted
技术标签:
【中文标题】OpenCV不会加载图像【英文标题】:OpenCV wont load image 【发布时间】:2019-08-28 03:07:37 【问题描述】:所以我链接了 OpenCV 的所有库,我已经添加了它工作所需的所有 .lib 和 .dll,但是当我去尝试获取图片以显示它时说图片不存在。所有路径都正确,图像在解决方案的主目录中,这是代码。
Mat color = imread("wall.jpg");
也试过了:
D:\\wall.jpg
和D:\wall.jpg
D:/wall.jpg
和D://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-----加载保存图像