水平翻转RGB元组列表python

时间:2017-04-30 03:09:21

标签: python list loops tuples reverse

我正在尝试让图像在python中进行水平翻转。我在包含所有RBG值的文本文件中有“图像”。我将这些RGB值放入元组中,以便我可以更改颜色/对图像执行操作。我想出了如何通过

进行垂直翻转
def apply_vertical_flip(image_2dlist, outfile):
'''
Accepts a 2-dimensional list of tuples and an output file object
Flips the image data in image_2dlist vertically
'''
    print("\nOpening ny.ppm for reading and ny_verical_flip.ppm for writing...\n")

    for i in range(len(image_2dlist)):
        image_2dlist.reverse()

    print(image_2dlist)

但是对于水平我需要翻转每一行的内容,而不是整个文件。我真的卡住了,我不知道如何改变每一行的内容。

这是我需要发生的事情

(1,2,3), (4,5,6), (7,8,9), (10,11,12)

(13,14,15) (16,17,18)(线的长度可能不同)

进入

(10,11,12), (7,8,9), (4,5,6), (1,2,3)

(18,17,16), (13,14,15)

由于某种原因,元组被打印在同一行,但我把一个\ n放在应该是休息的地方(不在代码中,只是堆栈溢出)

2 个答案:

答案 0 :(得分:0)

只使用1个列表来存储元组,你就会接近这个错误。

图像是4面形状,像素与网格状结构对齐;并且可能是您描述的那一行是该行的一行。

为什么不使用表示图像像素的2D列表,然后可以简化您想要实现的图像的计算/处理。此外,这样做可以省去关注图像大小和/或宽度/高度的需要。

例如;

w, h = img.width, img.height;
pixels = [[0 for x in range(w)] for y in range(h)] 
# Fill the pixels here
# Flip the image horizontally
for row in grid:
    row.reverse()

根据您尚未披露的数据结构,您可能需要以各种方式构建初始2D阵列。

答案 1 :(得分:0)

这会翻转每一行。

image = (((1,2,3),(4,5,6),(7,8,9),(10,11,12)),((13,14,15),(16,17,18)))
image_Hflip = tuple([i[::-1] for i in image])

print image_Hflip
  (((10,11,12),(7,8,9),(4,5,6),(1,2,3)),((16,17,18),(13, 14,15)))

虽然我确信有更好的方法来表示图像数据。

相关问题