簡體   English   中英

給出它的字符串垂直翻轉(反向)圖像?

[英]Flip (reverse) image vertically given its string?

所以我有一串RGBA圖像數據,每個像素長一個字節。 我也知道圖像的x和y分辨率。 現在我想以一種方式編輯字符串,這會導致圖像被垂直翻轉或反轉,這意味着像素的第一個“行”變成最后一行而相反,對於所有其他“行”都是如此。 有快速的方法嗎?

要做到你想要的信,這是一種方法:

>>> 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數據類型快一個數量級 你應該看一下翻轉功能。 例:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM