给出它的字符串垂直翻转(反向)图像?

时间:2011-11-19 07:05:59

标签: python image image-processing reverse flip

所以我有一串RGBA图像数据,每个像素长一个字节。我也知道图像的x和y分辨率。现在我想以一种方式编辑字符串,这会导致图像被垂直翻转或反转,这意味着像素的第一个“行”变成最后一行而相反,对于所有其他“行”都是如此。有快速的方法吗?

2 个答案:

答案 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();