这是我的代码:
#include<opencv\cv.h>
#include<opencv\highgui.h>
using namespace cv;
using namespace std;
int main()
{
Mat src;
//src.create(200,500,CV_8UC3);
src = imread( "a.bmp", 1 );
namedWindow( "Display window", WINDOW_AUTOSIZE );
if(!src.data)
cout<<"Could not open or find the image" << std::endl ;
else
imshow( "Display window", src);
waitKey(0);
return 0;
}
始终执行if
部分
当我使用src.create
代替imread()
时,它会显示一个空图像。
答案 0 :(得分:8)
要调试您的问题,您应该尝试确认图像路径是否正确。
根据评论中的建议,尝试指定文件的完整绝对路径。如果你在Windows上,请记住使用转义斜杠(例如c:\ a.bmp将需要&#34; c:\ a.bmp&#34;)
OR
如果从Visual Studio执行应用程序,则可以将工作目录配置为位图的工作目录! (OpenCV cvLoadImage() does not load images in visual studio debugger?)
您也可以尝试使用cvLoadImage代替imread。如果cvLoadImage可以打开该文件,那么您可能会混合使用发行版和调试库,从而导致出现问题:
答案 1 :(得分:4)
OpenCV文档提到如果无法读取图像文件,imread()
会返回一个空矩阵(Mat :: data == NULL)。
http://docs.opencv.org/modules/highgui/doc/reading_and_writing_images_and_video.html#imread
您应该检查&#34; a.bmp&#34;文件位于当前工作目录中。 IDE(visual studio)可以故意设置可执行文件的工作目录(Debug / ... Release / ...)。使用&#34; a.bmp&#34;的绝对路径,或者从命令行在预期目录中启动可执行文件也会有所帮助,前提是&#34; a.bmp&#34;是一个有效的BMP文件,并且您具有正确的文件系统权限来读取它。
答案 2 :(得分:1)
我在视觉研究和imread返回空数据方面遇到了同样的问题。
img = cv::imread("c:\\data\\a.bmp",1);
请注意\\
分隔符,以使Windows能够正确解析路径。
答案 3 :(得分:0)
您的opencv
库应与config
中的应用程序的Debug
即Release
或Visual Studio
或您正在使用的任何版本(如果您使用的是WINDOWS
使用预构建的二进制文件。