【问题标题】:Speeding up loading of images in OpenCV vs Pillow加快 OpenCV 与 Pillow 中图像的加载速度
【发布时间】:2021-02-03 03:33:28
【问题描述】:

在我的测试 python 应用程序中,我有一个非常标准的 JPEG 文件 1500 x 800 作为缓冲区 buf 加载到内存中。该缓冲区需要被解码为图像对象,以便我可以在 OpenCV 中使用它。

我知道两种解决方案:

  1. 枕头或枕头-SIMD:
from PIL import Image
from io import BytesIO

image = Image.open(BytesIO(buf))
  1. OpenCV:
import cv2
import numpy as np

np_buffer = np.frombuffer(buf, np.uint8)
image = cv2.imdecode(np_buffer, 128 | 1)

现在,我面临的问题是性能。平均而言,使用 Pillow 加载图像需要 0.1ms,使用 OpenCV 加载图像需要 30ms

当然,将 Pillow 图像对象转换为 OpenCV 格式(numpy 数组)会产生额外的开销,但是,有什么办法可以加快 OpenCV 中图像缓冲区的加载和解码速度?

我正在使用:

Python 3.8.5
Pillow-SIMD 7.0.0.post3
opencv-python 4.4.0.44
numpy 1.19.2

【问题讨论】:

    标签: python-3.x image opencv image-processing python-imaging-library


    【解决方案1】:

    用枕头代替这个

    from PIL import Image
    from io import BytesIO
    
    image = Image.open(BytesIO(buf))
    

    使用这个

    from PIL import Image
    from io import BytesIO
    import numpy as np
    
    image = Image.open(BytesIO(buf))
    arr = np.array(image, dtype=np.uint8)
    

    那么这将是一个失败的比较,因为枕头 Image.open 不会访问像素值。仅当您尝试绘制图像或将其转换为数组时才会这样做。

    【讨论】:

      猜你喜欢
      • 2016-11-20
      • 1970-01-01
      • 2015-06-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-22
      • 2015-01-21
      • 1970-01-01
      相关资源
      最近更新 更多