我正在尝试这里的基本教程http://bsd-noobz.com/opencv-guide/40-1-load-and-display-an-image,它处理加载和显示图像。我在Visual Studio 2012中这样做。
我已将图像文件“lena.png”放在exe文件旁边的Debug文件夹中。当我尝试从终端执行exe文件时,它只回复“无法加载图像!”。我也在Release文件夹中尝试了相同的结果。
这是我对该程序的代码:
#include <opencv2/highgui/highgui.hpp>
#include <iostream>
using namespace cv;
using namespace std;
int main(int argc, char** argv)
{
if(argc > 1){
cout << argv[1] << endl;
}
Mat img = imread("lena.png", CV_LOAD_IMAGE_COLOR);
if (img.empty())
{
cout << "Cannot load image!" << endl;
return -1;
}
namedWindow("image", CV_WINDOW_AUTOSIZE);
imshow("image", img);
waitKey(0);
return 0;
}
我不明白为什么这个hapens,图片与.exe在同一个目录中,我按照示例代码写了字母。请帮我理解为什么它找不到文件!
编辑: 哈哈哈哈我修好了。在愤怒的情况下,我将所有其他依赖项从* .lib更改为* d.lib,因为我正在运行调试版本并且它工作正常。如果我阅读关于如何使用opencv的教程,它说有一个区别但是因为它编译后我认为它会起作用。我现在要尝试发布版本并查看它是否有效(当然要更改依赖项)。
编辑2: 是的,它有效。因此,我自己的问题的答案是,您需要将include文件夹中的正确.lib文件链接为调试和发布版本的依赖项。以“d”结尾的调试版和其他版本的版本。现在我发现问题可能并不那么令人惊讶,但事实并非如此。
答案 0 :(得分:0)
可能与imread
的文件格式有关。尝试使用.jpg
或任何有效的图片格式。引用here,
The function imread loads an image from the specified file and returns it. If the image can not be read (because of missing file, improper permissions, unsupported or invalid format), the function returns empty matrix ( Mat::data==NULL ).