我遇到麻烦的代码部分如下。
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个新图像,但仍然收到相同的错误。任何建议都会很棒!
答案 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会给您带来这些问题-它可能只是路径/文件名中的错字。