OSError: image file is truncated与PIL.UnidentifiedImageError: cannot identify image file的解决方案

19 篇文章 0 订阅
12 篇文章 0 订阅

原因分析

在我们使用 PIL 处理图像数据的时候。如果我们的数据集里的某些图片部分损坏或者直接打不开了,就会出现一些错误。比如这个错误OSError: image file is truncated,又或者是PIL.UnidentifiedImageError: cannot identify image file。

————————————————————————————————————————

解决方案

1.手动更替这个受损的图片

这个方法适用于受损数据量少的数据集

2.将无用的数据直接抛掉

from PIL import ImageFile
ImageFile.LOAD_TRUNCATED_IMAGES = True

这个方法的运用的意思是 当遇到数据截断的图片时,PIL会直接break,跳出函数,不报错,进行下一个。这个方法适用于错误 OSError: image file is truncated

3.使用try except跳过这个异常

            try:
                real_input = Image.open(img_dir).convert('RGB')
                input_images = self.img_transform(real_input)
                input_images = input_images[2, :, :]
                input_images = np.expand_dims(input_images, axis=0)

                bufImg = Image.open(gt_dir).convert('RGB')
                dilated_bufImg = self.img_transform(bufImg)
                dilated_bufImg = dilated_bufImg[2, :, :]
                output_images = np.expand_dims(dilated_bufImg, axis=0)

                sample_info = {}
                sample_info['input_images'] = input_images
                sample_info['output_images'] = output_images
                return sample_info

            except:
                print('ERROR, Path: ', img_dir)
                img_dir = os.path.join(self.imageset_dir, "004255_2.png")
                real_input = Image.open(img_dir).convert('RGB')
                input_images = self.img_transform(real_input)
                input_images = input_images[2, :, :]
                input_images = np.expand_dims(input_images, axis=0)

                sample_info = {}
                sample_info['input_images'] = input_images
                sample_info['output_images'] = input_images
                return sample_info

我这里是将受损的图片用正常的图片进行代替并返回。如果不返回值,batch会缺少一个数据,后面会报错TypeError的错。这个方法适用于 PIL.UnidentifiedImageError: cannot identify image file

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值