为什么 imread() 总是返回空数据?

新手上路,请多包涵

这是我的代码:

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

原文由 Tanmay Verma 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.6k
2 个回答

要调试您的问题,您应该尝试确认图像路径是否正确。

正如评论中所建议的,尝试指定文件的完整绝对路径。如果您在 Windows 上,请记住使用转义斜线(例如 c:\a.bmp 需要为“c:\a.bmp”)

或者

如果您是从 Visual Studio 执行应用程序,那么您也可以将工作目录配置为位图的目录! ( OpenCV cvLoadImage() 不在 Visual Studio 调试器中加载图像?

您也可以尝试使用 cvLoadImage 代替 imread。如果 cvLoadImage 可以打开文件,那么您可能混合了发布和调试库,从而导致您出现以下问题:

原文由 Fuzz 发布,翻译遵循 CC BY-SA 3.0 许可协议

OpenCV 文档提到 imread() 如果无法读取图像文件,将返回一个空矩阵( Mat::data==NULL )。

http://docs.opencv.org/modules/highgui/doc/reading_and_writing_images_and_video.html#imread

您应该检查“a.bmp”文件是否在您当前的工作目录中。 IDE(Visual Studio)可能会故意设置可执行文件的工作目录(Debug/… Release/…)。使用“a.bmp”的绝对路径,或从命令行在预期目录中启动可执行文件也会有所帮助,前提是“a.bmp”是有效的 BMP 文件并且您具有读取它的正确文件系统权限。

原文由 dexjq23 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题