磁盘图片到numpy的两种方法:一次意外的优化

44 篇文章 3 订阅
23 篇文章 1 订阅

概述

在优化代码时意外将图片读取的效率提升了60倍。

主要就是在python下把磁盘图片变为numpy数组。

低效方法:PIL和numpy组合

import numpy as np
from PIL import Image

def load_image_into_numpy_array(image):
    (im_width, im_height) = image.size
    return np.array(image.getdata()).reshape((im_height, im_width, 3)).astype(np.uint8)

image = Image.open( image_abs_path )
image_np = image_handle.load_image_into_numpy_array( image )

在服务器CPU上,800X600的图片读取约600+ms。模型推理一次才100ms,被IO拖了后腿。

高效方法:opencv

import cv2

image_np = cv2.imread( image_abs_path )

opencv读取图片出来就是numpy,效率非常高。cpu上读取800x600的图片不到10ms,效率提升了60+倍。

原因分析

因为平常用PIL很小,所以没有深究。看到资料说numpy实际上有对速度进行优化的。我推测应该是老的方法里面有多次copy操作,导致效率低效。copy的地方可能在reshape和astype。如果这两个地方都有copy,效率很难提高。

参考资料:为什么用 Numpy 还是慢, 你用对了吗?

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值