赞
踩
原因是png图片里面的profile ,好像又听说高版本的png在做什么。
解决方式很简单,重写一下这个图。
下面程序会读取 r"/ssd/xiedong/datasets/multilabelsTask/"下面的所有jpg和png图,多进程方式地重写一下图片,注意,如果opencv打不开这个图,这个图会被删除:
import multiprocessing import os import cv2 import numpy as np def listPathAllfiles(dirname): result = [] for maindir, subdir, file_name_list in os.walk(dirname): for filename in file_name_list: apath = os.path.join(maindir, filename) result.append(apath) return result def overwrite(files1): for fname in files1: try: if fname.endswith(".jpg"): img = cv2.imdecode(np.fromfile(fname, dtype=np.uint8), 1) # img是矩阵 cv2.imencode('.jpg', img)[1].tofile(fname) elif fname.endswith(".png"): img = cv2.imdecode(np.fromfile(fname, dtype=np.uint8), 1) # img是矩阵 cv2.imencode('.png', img)[1].tofile(fname) except: os.remove(fname) print(fname) if __name__ == '__main__': root = r"/ssd/xiedong/datasets/multilabelsTask/" files = listPathAllfiles(root) p = multiprocessing.Pool() # 创建一个包含2个进程的进程池 # split files to several parts for i in range(0, len(files), 10000): p.apply_async(func=overwrite, args=(files[i:i + 1000],)) # 往池子里加一个异步执行的子进城 p.close() # 等子进程执行完毕后关闭进程池 p.join() # 主进程等待
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。