我正在尝试让图像在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放在应该是休息的地方(不在代码中,只是堆栈溢出)
答案 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)))
虽然我确信有更好的方法来表示图像数据。