问题描述
我正在处理一个展平图像 (1920x1080x4),其中我需要重塑(例如 arr.reshape((1920,1080,4))
)、移除最后一个通道(例如 arr[:,:,:3]
)、从 BGR 转换为 RGB(例如 { {1}}) 并最终再次变平(例如 arr[:,::-1]
)。问题在于 ravel/flatten/reshape(-1) 操作,这会增加大约 20 毫秒的计算时间。
为了便于调试,我假设传入的数组是一个扁平化的 1920x1080x3 图像,这意味着我只需要担心 BGR 到 RGB 的转换和扁平化。但是,在测试 reshape+ravel、reshape+BGR2RGB 和最后 reshape+BGR2RGB+ravel 时,结果分别为 1ms、1ms、20ms,这对我来说没有任何意义,因为它只是一些值在内存中改变了位置. ravel 是否有任何理由创建数组的副本?我怎样才能减少这个时间?
注意:我也测试了 arr.ravel()
文档的注释上写的 inplace reshape 方法,但是,如指定的那样,出现错误,意味着需要复制数组之前为了重塑。
Bellow 是我用来测试的代码:
numpy.reshape
在我的机器上输出
import numpy as np
from time import time
arr_original = np.ones((1920*1080*3),dtype=np.uint8)
arr = arr_original.copy()
s = time()
arr = arr.reshape(1920,3)
arr = arr.ravel()
print(f"Reshape + ravel: {round(1000*(time()-s),2)}ms")
arr = arr_original.copy()
s = time()
arr = arr.reshape(1920,3)
arr = arr[:,::-1]
print(f"Reshape + BGR2RGB: {round(1000*(time()-s),::-1]
arr = arr.ravel()
print(f"Reshape + BGR2RGB + ravel: {round(1000*(time()-s),2)}ms")
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)