【发布时间】:2011-11-19 15:45:06
【问题描述】:
所以我有一串RGBA图像数据,每个像素都是一个字节长。我也知道图像的 x 和 y 分辨率。现在我想以一种会导致图像垂直翻转或反转的方式编辑字符串,这意味着让第一“行”像素成为最后一行,相反,对于所有其他“行”都是如此。有没有快速的方法?
【问题讨论】:
标签: python image image-processing reverse flip
所以我有一串RGBA图像数据,每个像素都是一个字节长。我也知道图像的 x 和 y 分辨率。现在我想以一种会导致图像垂直翻转或反转的方式编辑字符串,这意味着让第一“行”像素成为最后一行,相反,对于所有其他“行”都是如此。有没有快速的方法?
【问题讨论】:
标签: python image image-processing reverse flip
完全按照自己的意愿行事这是一种方法:
>>> img = 'ABCDEFGHIJKL'
>>> x, y = 4, 3
>>> def chunks(l, n):
... for i in xrange(0, len(l), n):
... yield l[i:i+n]
...
>>> [row for row in chunks(img, x)]
['ABCD', 'EFGH', 'IJKL']
>>> ''.join(reversed([row for row in chunks(img, x)]))
'IJKLEFGHABCD'
但是,除非你的图片非常小,否则最好通过numpy,因为这至少是一个幅度比 Cpython 数据类型快。您应该查看flipup 函数。示例:
>>> A
array([[ 1., 0., 0.],
[ 0., 2., 0.],
[ 0., 0., 3.]])
>>> np.flipud(A)
array([[ 0., 0., 3.],
[ 0., 2., 0.],
[ 1., 0., 0.]])
编辑: 考虑添加一个完整的示例,以防您以前从未使用过 NumPy。当然,转换只对不是 2x2 的图像有价值,因为实例化数组有开销....
>>> import numpy as np
>>> img = [0x00, 0x01, 0x02, 0x03]
>>> img
[0, 1, 2, 3]
>>> x = y = 2
>>> aimg = np.array(img).reshape(x, y)
>>> aimg
array([[0, 1],
[2, 3]])
>>> np.flipud(aimg)
array([[2, 3],
[0, 1]])
【讨论】:
假设你有数组img中的图像,然后做
img.reverse();
#also need to flip each row
for row in img:
row.reverse();
【讨论】: