python - PIL图像到numpy数组的Python转换非常慢
问题描述
我正在评估开放 cv 视频帧上的 Tensorflow 模型。我需要将传入的 PIL 图像重新整形为重新整形的 numpy 数组,以便我可以对其进行推理。但是我看到在我的笔记本电脑上,将 PIL 图像转换为 numpy 数组大约需要 900 多毫秒,它具有 16 GiB 内存和 2.6 GHz Intel Core i7 处理器。我需要把它降低到几毫秒,这样我就可以在我的相机上每秒处理多个帧。
谁能建议如何使以下方法运行得更快?
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 数组才是真正的罪魁祸首。
解决方案
您可以让 numpy 处理转换,而不是重塑自己。
def pil_image_to_numpy_array(pil_image):
return np.asarray(pil_image)
您正在将图像转换为(高度、宽度、通道)格式。这是对 PIL 图像执行的默认转换 numpy.asarray 函数,因此不需要显式重塑。
推荐阅读
- android - Android Studio 关闭键盘并完成活动
- node.js - TypeError:_this._transport.sendEvent 不是函数
- java - 从 C 转换为 Java 的块合并排序未正确排序;是我重构指针的责任吗?
- jekyll - 如何在没有 XML 文件的情况下将 Blogger 站点导入 Jekyll?
- java - 从另一个活动中获取数据正在给出 RuntimeException
- mysql - MySQL 从另一个表值更新表
- ruby - 有没有办法打印由 ruby-net-ldap 发送到 LDAP 服务器的确切命令?
- c# - 缩小矩形以显示它在大原始图像中的样子
- c# - 可选依赖注入最佳实践
- thymeleaf - 如何在 Thymeleaf 中使用#locale