2016-07-26 79 views
0

我正在用[n_images,width,height,3]创建一个大的numpy数组。 为此,我创建一个空列表并附加从剪切RGB图像创建的numpy数组,并将它们转换为numpy数组。将PIL对象转换为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区别:

  • 周围80毫秒为先运
  • 周围的8ms第二

这是为什么? PIL在将它转换为numpy数组时将隐式地执行convert_to_rgb操作?如果检测到两个PIL对象都有RGB模式,所以它很奇怪。有没有办法加速这个过程?我应该怎么做来优化这个过程?不使用PIL?之后将它们转换为数组?

+0

您可能想看看scikit-image – MaxNoe

+0

谢谢!会做 ! – jean

回答

2

official documentation for Image.open

打开和标识所述给定的图像文件。 这是一个懒惰的操作; 函数读取文件头,但直到你尝试处理数据

第一操作实际的图像数据不是从文件中读取 ,你定时读取数据的过程从磁盘。

+0

是的,我认为这是类似的东西,你知道是否有可能以某种方式降低PIL的fast_load函数或其他什么? – jean

+0

@jean:购买更快的磁盘?你不会用软件来提高你的磁盘性能。如果你从磁盘读取的东西超过了你需要的次数,你可以尝试减少这些,但是没有“fast_load”函数可以使磁盘以某种方式更快。 – user2357112

+0

好的,太糟糕了!谢谢 ! – jean

相关问题