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

坚持写博客,分享自己的在学习、工作中的所得

  1. 给自己做备忘
  2. 对知识点记录、总结,加深理解
  3. 给有需要的人一些帮助,少踩一个坑,多走几步路

尽量以合适的方式排版,图文兼有
如果写的有误,或者有不理解的,均可在评论区留言
如果内容对你有帮助,欢迎点赞 收藏 ⭐留言 。
虽然平台并不会有任何奖励,但是我会很开心,可以让我保持写博客的热情



文章目录

  • 生成数组
  • 函数实现
    • 保存图片
    • 读取图片
  • 结论

生成数组

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

生成二维数组:

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有较大的优势
  • 读取图片时,pillowopencv耗时接近
  • 在大量图片数据读写时可以优先考虑pillow


如果内容对你有帮助,或者觉得写的不错
️‍欢迎点赞 收藏 ⭐留言
有问题,请在评论区留言

你可能感兴趣的:(Python,opencv,计算机视觉,python)