将PIL对象转换为numpy时会发生什么?

时间:2016-07-26 18:09:04

标签: numpy optimization python-imaging-library

我正在用[n_images,width,height,3]创建一个大的numpy数组。 为此,我创建了一个空列表,并附加了从裁剪RGB图像创建的numpy数组并将它们转换为numpy数组。

我遇到了一些非常奇怪的尝试优化我的代码:

import time
from PIL import Image

im1=Image.open("random_png_image.png")
im2=Image.open("random_png_image.png").convert('RGB')

t1=time.time()
a1=np.asarray(im1)
t2=time.time()
a2=np.asarray(im2)
t3=time.time()

print("Converting to numpy without converting to RGB mode first took: %0,3f ms"%((t2-t1)*1000.0))
print("Converting to numpy after the image was converted to RGB first took: %0,3f ms"%((t3-t2)*1000.0))

我得到了一个HUUUGE差异:

  • 第一次操作大约80ms
  • 第二次约8ms

为什么? PIL在将其转换为numpy数组时是否隐式执行此convert_to_rgb?如果检查了两个PIL对象都有RGB模式,所以很奇怪。有没有办法加快这个过程?我该怎么做才能优化这个过程?不使用PIL?之后将它们转换为数组?

1 个答案:

答案 0 :(得分:2)

来自official documentation for Image.open

  

打开并识别给定的图像文件。 这是一项懒惰的操作;   该函数读取文件头,但实际图像数据不是   从文件中读取,直到您尝试处理数据

通过第一次操作,您可以对从磁盘读取数据的过程进行计时。