首页 > 解决方案 > PIL图像到numpy数组的Python转换非常慢

问题描述

我正在评估开放 cv 视频帧上的 Tensorflow 模型。我需要将传入的 PIL 图像重新整形为重新整形的 numpy 数组,以便我可以对其进行推理。但是我看到在我的笔记本电脑上,将 PIL 图像转换为 numpy 数组大约需要 900 多毫秒,它具有 16 GiB 内存和 2.6 GHz Intel Core i7 处理器。我需要把它降低到几毫秒,这样我就可以在我的相机上每秒处理多个帧。

谁能建议如何使以下方法运行得更快?

def load_image_into_numpy_array(pil_image):
    (im_width, im_height) = pil_image.size
    data = pil_image.getdata()

    data_array = np.array(data)

    return data_array.reshape((im_height, im_width, 3)).astype(np.uint8)

在进一步的仪器中,我意识到这np.array(data)需要花费大部分时间......接近 900 多毫秒。因此,将图像数据转换为 numpy 数组才是真正的罪魁祸首。

标签: pythonnumpyopencvtensorflowcomputer-vision

解决方案


您可以让 numpy 处理转换,而不是重塑自己。

def pil_image_to_numpy_array(pil_image):
    return np.asarray(pil_image)  

您正在将图像转换为(高度、宽度、通道)格式。这是对 PIL 图像执行的默认转换 numpy.asarray 函数,因此不需要显式重塑。


推荐阅读