如何使cv2.imread()不为空?

时间:2019-01-07 16:29:14

标签: python opencv cv2

我遇到麻烦的代码部分如下。

if __name__ == '__main__':
    for n, image_file in enumerate(os.scandir(image_folder)):
        img = image_file
        fig, ax = plt.subplots(1)
#       mngr = plt.get_current_fig_manager()
#       mngr.window.setGeometry(250, 120, 1280, 1024)
        image = cv2.imread(image_file.path)
        image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)

我收到以下错误

 image = cv2.cvtColor(image,cv2.COLOR_BGR2RGB)
    cv2.error: OpenCV(3.4.4) C:\projects\opencv-python\opencv\module\imgproc\src\color.cpp:181:error:(-215:Assertion failed) !_src.empty() in function 'cv::cvtColor'

我知道imread()可能为空,因为它试图读取的图像没有正确保存。我正在尝试使用保存为000001、000002、000003的3张图像来测试此代码。我对为什么保存在C:\ imagez文件夹中的图像不起作用感到困惑。我尝试保存3个新图像,但仍然收到相同的错误。任何建议都会很棒!

1 个答案:

答案 0 :(得分:1)

如果您阅读documentation on cv2.imread(),则会发现它可能会失败-在这种情况下,它将返回None(这就是Mat::data==NULL在python中的含义):

  

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

如果您将None作为cv2.cvtColor(image, cv2.COLOR_BGR2RGB)的输入,则会在检查参数(-215:Assertion failed) !_src.empty() in function 'cv::cvtColor'并将其为None时引发错误:

修复:

if __name__ == '__main__':
    for n, image_file in enumerate(os.scandir(image_folder)):
        fig, ax = plt.subplots(1)
        image = cv2.imread(image_file.path)
        if image:
            image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
        else:
            print("Unable to load image at path {}".format(image_file))

检查路径的_exact_spelling会给您带来这些问题-它可能只是路径/文件名中的错字。