2

我目前正在为学校编写一个程序,该程序允许我将 .ppm 文件加载到 main 中,然后运行一系列函数,允许用户以各种方式操作显示的图像文件(也可以通过另一个函数完成)方法。我需要能够操作此文件的一种方法是在水平轴上进行“翻转”。因此,我需要我的函数将每一行的元素移动到它们的“相反”位置。例如,如果我的数组看起来像这样 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14] 我需要我的函数来扭转它 [ 14、13、12、11、10、9、8、7、6、5、4、3、2、1、0]。

注意:每 3 个元素代表一个像素的 RGB 值,所以我不确定中间 3 个元素应该如何表现,但我会认为它需要保持不变。

到目前为止,这是我的功能:

def Switch(image_arry, cols, rows):


for y in range(rows):

    for x in range(0, cols):

        r1 = image_arry[y][x*3]
        g1 = image_arry[y][x*3+1]  
        b1 = image_arry[y][x*3+2]

        r2 = image_arry[y][x*3 -3]
        g2 = image_arry[y][x*3 - 2]  
        b2 = image_arry[y][x*3 - 1]

        image_arry[y][x*3] = image_arry[y][x*3 -3]
        image_arry[y][x*3+1] = image_arry[y][x*3 - 2]
        image_arry[y][x*3+2] = image_arry[y][x*3 - 1]

注意:由于这是一门大学课程,我不允许在我的程序中使用我们在本课程中尚未涵盖的任何内容(这是一个 4 个月、100 级的课程,因此范围不是很广)。而且我也不允许使用 break 或 while(1) 语句。非常感谢您的帮助!

4

1 回答 1

2

首先,您应该将每个像素作为数组中的一个条目。这意味着您需要将 RGB 值保留在一个对象中,而不是像本例中那样三个。

由于你不能使用类,我建议让每个像素都是一个元组或列表。因此,一个黑色像素、一个灰色像素和一个绿色像素的三像素行将如下所示:

row = [(0,0,0,), (128, 128, 128), (0, 255, 0)]

您现在可以像这样反转该行:

row.reverse()

该行现在将是:

row = [(0,0,0,), (128, 128, 128), (0, 255, 0)]

翻转的代码很简单:

for row in image:
    row.reverse()
于 2012-04-26T10:56:47.840 回答