水平翻转 RGB 元组列表 python
Horizontal flip RGB tuple list python
我正在尝试让图像在 python 中进行水平翻转。我在包含所有 RBG 值的文本文件中有 "image"。我将这些 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(不在代码中,只是堆栈溢出)
您仅使用 1 个列表来存储您的元组,这是错误的做法。
图像是一个 4 边形,其像素与网格状结构对齐;据推测,您描述的线是该网格的一行。
为什么不使用表示图像像素的 2D 列表,然后您可以简化要实现的图像的 calculations/processing。此外,这样做无需担心图像大小 and/or width/height.
例如;
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()
根据您未公开的数据结构,您可能必须以多种方式构建初始二维数组。
这将翻转每一行。
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)))
虽然我确信有更好的方法来表示图像数据。
我正在尝试让图像在 python 中进行水平翻转。我在包含所有 RBG 值的文本文件中有 "image"。我将这些 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(不在代码中,只是堆栈溢出)
您仅使用 1 个列表来存储您的元组,这是错误的做法。
图像是一个 4 边形,其像素与网格状结构对齐;据推测,您描述的线是该网格的一行。
为什么不使用表示图像像素的 2D 列表,然后您可以简化要实现的图像的 calculations/processing。此外,这样做无需担心图像大小 and/or width/height.
例如;
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()
根据您未公开的数据结构,您可能必须以多种方式构建初始二维数组。
这将翻转每一行。
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)))
虽然我确信有更好的方法来表示图像数据。