【问题标题】:What is happening when converting PIL objects to numpy?将 PIL 对象转换为 numpy 时会发生什么?
【发布时间】:2016-07-26 18:09:03
【问题描述】:

我正在用 [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))

我得到了一个巨大的差异:

  • 第一个操作大约 80 毫秒
  • 第二个大约 8 毫秒

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

【问题讨论】:

  • 你可能想看看 scikit-image

标签: numpy optimization python-imaging-library


【解决方案1】:

来自official documentation for Image.open

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

在第一个操作中,您正在计时从磁盘读取数据的过程。

【讨论】:

  • 是的,我认为它是这样的,你知道是否可以通过 PIL 或其他的 fast_load 函数以某种方式降低该时间?
  • @jean:购买更快的磁盘?您不会在软件中提高磁盘性能。如果您从磁盘读取内容的次数超出了您的需要,您可以尝试减少这种情况,但没有“fast_load”功能可以让磁盘以某种方式更快。
  • 好吧,太糟糕了!谢谢!
猜你喜欢
  • 2020-08-04
  • 2014-04-12
  • 2021-05-07
  • 2012-09-10
  • 1970-01-01
  • 1970-01-01
  • 2017-05-10
  • 2021-08-15
  • 1970-01-01
相关资源
最近更新 更多