我正在用[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差异:
为什么? PIL在将其转换为numpy数组时是否隐式执行此convert_to_rgb?如果检查了两个PIL对象都有RGB模式,所以很奇怪。有没有办法加快这个过程?我该怎么做才能优化这个过程?不使用PIL?之后将它们转换为数组?
答案 0 :(得分:2)
来自official documentation for Image.open
:
打开并识别给定的图像文件。 这是一项懒惰的操作; 该函数读取文件头,但实际图像数据不是 从文件中读取,直到您尝试处理数据
通过第一次操作,您可以对从磁盘读取数据的过程进行计时。