imread()无法正常工作

时间:2014-09-22 00:50:42

标签: c++ c visual-studio opencv

这是我的代码:

    #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()时,它会显示一个空图像。

4 个答案:

答案 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中的应用程序的DebugReleaseVisual Studio或您正在使用的任何版本(如果您使用的是WINDOWS使用预构建的二进制文件。