Pon*_*ono 6 opencv image image-processing python-imaging-library python-3.x
在我的测试Python应用程序中,我有一个非常标准的JPEG文件1500 x 800作为缓冲区加载到内存中buf
。该缓冲区需要解码为图像对象,以便我可以在 OpenCV 中使用它。
我知道两个解决方案:
from PIL import Image
from io import BytesIO
image = Image.open(BytesIO(buf))
Run Code Online (Sandbox Code Playgroud)
import cv2
import numpy as np
np_buffer = np.frombuffer(buf, np.uint8)
image = cv2.imdecode(np_buffer, 128 | 1)
Run Code Online (Sandbox Code Playgroud)
现在,我面临的问题是性能。平均而言,使用 Pillow 加载图像需要0.1 毫秒,使用 OpenCV 加载图像需要30 毫秒。
当然,将 Pillow 图像对象转换为 OpenCV 格式(numpy 数组)会产生额外的开销,但是仍然可以做些什么来加快 OpenCV 中图像缓冲区的加载和解码速度?
我在用:
Python 3.8.5
Pillow-SIMD 7.0.0.post3
opencv-python 4.4.0.44
numpy 1.19.2
Run Code Online (Sandbox Code Playgroud)
枕头而不是这个
from PIL import Image
from io import BytesIO
image = Image.open(BytesIO(buf))
Run Code Online (Sandbox Code Playgroud)
用这个
from PIL import Image
from io import BytesIO
import numpy as np
image = Image.open(BytesIO(buf))
arr = np.array(image, dtype=np.uint8)
Run Code Online (Sandbox Code Playgroud)
那么这将是一个公平的比较,因为pillow Image.open不会访问像素值。仅当您尝试绘制图像或将其转换为数组时,它才会发生。这应该与您的 opencv 代码相当。
归档时间: |
|
查看次数: |
4898 次 |
最近记录: |