我正在努力学习Keras的图像分割教程。它似乎在Colab中运行良好,但在本地运行时,我得到以下错误:
for j, path in enumerate(batch_target_img_paths):
img = load_img(path, target_size=self.img_size, color_mode="grayscale")
...
Exception has occurred: UnidentifiedImageError
cannot identify image file <_io.BytesIO object at 0x0000020130390400>
File "C:Computer Visionmain_tutorial.py", line 203, in __getitem__
img = load_img(path, target_size=self.img_size, color_mode="grayscale")
File "C:Computer Visionmain_tutorial.py", line 102, in main
model.fit(train_gen, epochs=epochs, validation_data=val_gen, callbacks=callbacks)
File "C:Computer Visionmain_tutorial.py", line 211, in <module>
main()
我已经验证了路径是正确的:
C:Computer Visionoxford-iiit-pettrainannotations._Abyssinian_10.png
有问题的文件._Abyssinian_10.png
似乎不是有效的图像(我认为它是目标掩码(,无法在常规图像查看应用程序中打开。
是否存在我遗漏的环境或平台问题?
如果您面临此错误,则图像可能已损坏或为NoneType
。
根据我的经验,你无法挽救这个图像,最好用下面的代码删除它,检查图像是否作为PNG
有效,如果不是,则删除图像。如果您有JPEG
图像,那么您可以只使用jpeg
。
您必须在映像的整个目录上运行此操作。
import cv2
import imghdr
import os
image_path = "C:Computer Visionoxford-iiit-pettrainannotations._Abyssinian_10.png"
image = cv2.imread(image_path)
img_type = imghdr.what(image_path)
if img_type != "png":
os.remove(image_path)
这个错误是我的错误。
annotations/trimaps
文件夹包含每个原始图像的两个文件:
._Abyssinian_1.png
Abyssinian_1.png
我试图加载不正确的文件._Abyssinian_1.png
,我本应在其中加载Abyssinian_1.png