opencv和pillow对图片的读写耗时对比

🧁生成数组
不同的包对于读写图片有不同的优化方式,导致他们的读写时间有差异,这个差异一般情况下可能无所谓,但是在大量图片数据的读写时,却可以节约大量的时间。

生成二维数组:

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

opencv:

%%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

weinxin
我的微信
一个码农、工程狮、集能量和智慧于一身的、DIY高手、小伙伴er很多的、80后奶爸。
Igor
  • 版权声明: 发表于 2023-01-2716:54:38
  • 转载注明:http://blog.tsingmac.com/prolions/imagetech/opencv/6118/
匿名

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: