我目前正在为学校编写一个程序,该程序将允许我将 .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]
注意:由于这是一门大学类(class),因此我不允许在我的程序中使用本类(class)中尚未涵盖的任何内容(这是一门为期 4 个月、100 级的类(class),因此范围不是很广泛)。而且我也不允许使用 break 或 while(1) 语句。非常感谢您的帮助!
最佳答案
首先,您应该将每个像素作为数组中的一个条目。这意味着您需要将 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()
关于将Python中的二维数组元素移动到 "opposite"一侧的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10327013/