OpenCV3.4.2:无法读取文件imread和cvLoadImage

时间:2020-10-04 15:49:22

标签: c++ opencv

我写了一个小样来测试我的OpenCV是否正常工作。 我的计算机包含版本 3.4.2 3.4.0

#include <iostream>
#include <opencv2/opencv.hpp>
using namespace std;
int main()
{
    
    cv::Mat image = cv::imread("map.jpg");
    cv::imshow("test", image);
    cv::waitKey(0);
    return EXIT_SUCCESS;
}

CMake文件:

cmake_minimum_required(VERSION 3.0.0)
project(opencv_test VERSION 0.1.0)

include(CTest)
enable_testing()

find_package( OpenCV 3.4.2 REQUIRED )
add_executable(opencv_test main.cpp)
target_link_libraries(opencv_test ${OpenCV_LIBS} )

set(CPACK_PROJECT_NAME ${PROJECT_NAME})
set(CPACK_PROJECT_VERSION ${PROJECT_VERSION})
include(CPack)

然后它会引发如下异常:

 OpenCV(3.4.2) /home/robomaster/opencv/modules/highgui/src/window.cpp:356: error: (-215:Assertion failed) size.width>0 && size.height>0 in function 'imshow'

我已经尝试并检查了以下方法:

  1. 检查绝对相对路径,它们是正确的。
  2. 检查imread()cvLoadImage(),输出是相同的。

,我不知道如何解决它。任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:1)

根据OpenCV docs

如果无法读取图像(由于缺少文件,则不正确) 权限,不支持的格式或无效的格式),该函数将返回一个 空矩阵(Mat :: data == NULL)

这意味着在cv::imread之后,您应该检查:

cv::Mat image = cv::imread("map.jpg");
if( image.data == nullptr )
  return 1; // EXIT_ERROR

再次根据docs,失败的可能原因是:

  • 缺少文件
  • 权限不当
  • 不受支持或格式无效

可能的解决方案:

  • 使用完整路径,检查文件是否存在
  • chmod +w map.jpg
  • 更改图像格式
相关问题