使用python比较PIL与OpenCV编码图片速度

以下代码演示了使用python调用 pil和opencv分别往内存中编码一个png或者jpeg图片。通过结果可以简单得出结论:

  1. 编码png格式比jpeg格式耗时更多。
  2. 编码jpeg格式pil与cv相差不大。
  3. 编码png格式pil与cv相差较大。
import time

from io import StringIO, BytesIO
from PIL import Image

import numpy as np
import cv2


img_path = '/Users/zhangxin/pic/car.jpg'

# 1 使用PIL加载图片
img = Image.open(img_path)
print("img size {}, mode {}".format(img.size, img.mode))
# 1.1 往内存中写图片——JPEG格式
t0 = time.time()
with BytesIO() as out:
    img.save(out, format='JPEG')
    t1 = time.time()
    with open('out_stream.jpg', 'wb') as fo:
        fo.write(out.getvalue())

# 1.2 往内存中写图片——PNG格式
t2 = time.time()
with BytesIO() as out:
    img.save(out, format='PNG')
    t3 = time.time()
    with open('out_stream.png', 'wb') as fo:
        fo.write(out.getvalue())

print("PIL save image as jpeg : ", t1 - t0)
print("PIL save image as png  : ", t3 - t2)

# 2 使用opencv 加载图片
img = cv2.imread(img_path)
print("img shape : ", img.shape)

# 2.1 往内存中写图片——JPEG格式
t0 = time.time()
_, img_bytes = cv2.imencode(".jpg", img)
img_str = np.array(img_bytes).tostring()
t1 = time.time()
with open("cv_tmp.jpg", "wb") as f:
    f.write(img_str)

# 2.2 往内存中写图片——PNG格式
t2 = time.time()
_, img_bytes = cv2.imencode(".png", img)
img_str = np.array(img_bytes).tostring()
t3 = time.time()
with open("cv_tmp.png", "wb") as f:
    f.write(img_str)


print("OpenCV save image as jpeg : ", t1 - t0)
print("OpenCV save image as png  : ", t3 - t2)

输出:

img size (800, 600), mode RGB
PIL save image as jpeg :  0.025282859802246094
PIL save image as png  :  0.2618370056152344
img shape :  (600, 800, 3)
OpenCV save image as jpeg :  0.02747821807861328
OpenCV save image as png  :  0.030751943588256836
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

张欣-男

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值