?生成数组
不同的包对于读写图片有不同的优化方式,导致他们的读写时间有差异,这个差异一般情况下可能无所谓,但是在大量图片数据的读写时,却可以节约大量的时间。
生成二维数组:
import cv2 import numpy as np from PIL import Image im = Image.new("RGB", (2048, 2048)) im = np.array(im) print(im.shape) # (2048, 2048, 3)
?函数实现
# image shape (2048, 2048, 3) def save_pillow(img, path): im = Image.fromarray(img) im.save(path) def save_cv2(img, path): cv2.imwrite(path, img) def read_img_pillow(path): with open(path, "rb") as f: img = Image.open(f) img.convert("RGB") return np.array(img) def read_img_cv2(path): img = cv2.imread(path) img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) return img
?保存图片
pillow:
%%timeit save_pillow(img=im, path='pil.jpg') # 18.8 ms
%%timeit save_cv2(img=im, path='cv.jpg') # 41.2 ms
可见使用opencv保存图片的耗时比pillow的两倍还高
?读取图片
pillow:
%%timeit read_img_pillow(path='pil.jpg') # 42.6 ms
opencv:
%%timeit read_img_cv2(path='cv.jpg') # 38 ms
读取图片时,opencv与pillow的耗时差不多,opencv稍快一点,但是其中一般耗时是np.array(img)操作:
def read_img_pillow2(path): with open(path, "rb") as f: img = Image.open(f) return img.convert("RGB")
%%timeit read_img_pillow2(path='pil.jpg') # 19.7 ms
返回的是PIL.Image.Image类型
?结论
保存图片时,pillow的耗时相比opencv有较大的优势
读取图片时,pillow与opencv耗时接近
在大量图片数据读写时可以优先考虑pillow
————————————————
版权声明:本文为CSDN博主「ayiya_Oese」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/ayiya_Oese/article/details/121692342
文章末尾固定信息

我的微信
我的微信
一个码农、工程狮、集能量和智慧于一身的、DIY高手、小伙伴er很多的、80后奶爸。
评论