原因这个博客说的很清楚了(42条消息) OSError: image file is truncated解决思路及方案。_image is truncated_windmeeeeee的博客-CSDN博客
我说一些比较坑爹的操作,在本地我的图像是完全没问题的,但是在autodl上边总是error,花费我一天找出来的原因是网盘把我的图片给屏蔽了!!!!我先把图传网盘里,再从网盘下载到autodl,真没想到啊,网盘刺客
我的图像是医学图像,可能有些血腥?万恶网盘NND
用下边的代码找到哪几张图出问题了,要不替换,要不删了
from distutils.log import error
import os
from PIL import Image
def is_valid_image(path):
'''
check .jpg image
'''
try:
isValid = True
fileObj = open(path, 'rb') # open image with binary format
buf = fileObj.read()
if not buf.startswith(b'\xff\xd8'): # start with '\xff\xd8'
isValid = False
elif buf[6:10] in (b'JFIF', b'Exif'):
if not buf.rstrip(b'\0\r\n').endswith(b'\xff\xd9'): # end with '\xff\xd9'
isValid = False
else:
try:
Image.open(fileObj).verify()
except Exception as e:
isValid = False
except Exception as e:
print('Can\'t open file: {}'.format(path))
return
if not isValid:
print('{} is damaged.'.format(path))
return
if __name__ == '__main__':
dataPath = './lung0/malignant'
imgList = os.listdir(dataPath)
for img in imgList:
path = os.path.join(dataPath, img)
is_valid_image(path)
我看有博客说rewrite也行,这个我没试,代码如下
import cv2
import os
# 读取函数,用来读取文件夹中的所有函数,输入参数是文件名
def read_directory(directory_name):
for filename in os.listdir(directory_name):
print(filename) # 仅仅是为了测试
img = cv2.imread(directory_name + "/" + filename)
#####显示图片#######
# cv2.imshow(filename, img)
# cv2.waitKey(0)
#####################
#####保存图片#########
cv2.imwrite("./data/lung/benign" + "/" + filename, img)
read_directory("./data/lung0/benign")#这里传入所要读取文件夹的绝对路径,加引号(引号不能省略!)