我正在编写一个解压缩程序,它(除其他外)必须对 RGB 图像应用增量过滤器。也就是说,读取图像,其中只有第一个像素是绝对的 (R1, G1, B1),所有其他像素都是 (R[n]-R[n-1], G[n]-G[n-1] ], B[n]-B[n-1]), 并将它们转换为标准RGB。
现在我正在使用 numpy,如下所示:
rgb = numpy.fromstring(data, 'uint8')
components = rgb.reshape(3, -1, order='F')
filtered = numpy.cumsum(components, dtype='uint8', axis=1)
frame = numpy.reshape(filtered, -1, order='F')
在哪里
- 第 1 行创建原始图像的一维数组;
第 2 行将其 reshape 为
[[R1, R2, ..., Rn], [G1, G2, ..., Gn], [B1, B2, ..., Bn]]
第 3 行执行实际的去过滤
- 第 4 行再次转换回一维数组
问题是它对我的需求来说太慢了。我对其进行了概要分析,发现大量时间花在了重新塑造数组上。
所以我想知道:是否有一些方法可以避免 reshape 或加快它的速度?
注意事项:
出于某种原因我还不明白,代码中的最终 reshape 复制了数据。这可以通过使用 C 命令而不是 Fortran 命令来避免:
rgb = numpy.fromstring(data, 'uint8')
components = rgb.reshape(-1, 3)
filtered = numpy.cumsum(components, dtype='uint8', axis=0)
frame = filtered.reshape(-1)
我是一名优秀的程序员,十分优秀!