Python将PIL图像转换为numpy数组非常慢

时间:2018-09-22 04:18:01

标签: python numpy opencv tensorflow computer-vision

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

有人可以建议如何使以下方法更快地运行吗?

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数组才是真正的罪魁祸首。

1 个答案:

答案 0 :(得分:1)

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

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

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