所以我有一串RGBA图像数据,每个像素长一个字节。我也知道图像的x和y分辨率。现在我想以一种方式编辑字符串,这会导致图像被垂直翻转或反转,这意味着像素的第一个“行”变成最后一行而相反,对于所有其他“行”都是如此。有快速的方法吗?
答案 0 :(得分:5)
要做你想要的信件,这是一种继续的方式:
>>> 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'
HOWEVER ,除非您的图片非常小,否则您会更好地通过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]])
答案 1 :(得分:0)
说你有数组img中的图像,然后执行
img.reverse();
#also need to flip each row
for row in img:
row.reverse();