【问题标题】:Flip (reverse) image vertically given its string?给定字符串垂直翻转(反转)图像?
【发布时间】:2011-11-19 15:45:06
【问题描述】:

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

【问题讨论】:

    标签: python image image-processing reverse flip


    【解决方案1】:

    完全按照自己的意愿行事这是一种方法:

    >>> 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]])
    

    【讨论】:

      【解决方案2】:

      假设你有数组img中的图像,然后做

      img.reverse();
      #also need to flip each row
      for row in img:
        row.reverse();
      

      【讨论】:

      • 数组?无论如何,图像数据是一个字符串,而不是每个“行”都有子列表的列表。
      猜你喜欢
      • 1970-01-01
      • 2014-04-28
      • 2017-03-27
      • 2016-07-29
      • 2011-05-18
      • 1970-01-01
      • 2015-12-28
      • 2016-10-15
      • 2016-07-17
      相关资源
      最近更新 更多