将Python中的二维数组元素移动到 "opposite"一侧的函数

标签 function multidimensional-array python-3.x ppm

我目前正在为学校编写一个程序,该程序将允许我将 .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/

相关文章:

c++ - 在 CPP 中初始化一个 2 Dimensional vector<int>

django - 有没有办法强制django在退出前运行一些整理代码?

python - 在pyqt5中对QTableView进行排序

python - pygame 函数似乎被忽略

function - Bourne shell 函数返回变量始终为空

php - 一堆互相调用的小函数。更好的方式来组织我的代码?

performance - Fortran多维子数组性能

c++ - 关于c++中重载流运算符的几个问题

c# - C# 中带有 "wrapped edges"的二维数组

python - Visual Studio Code : OSError: [Errno 30] Read-only file system while trying to install pylint on Linux Mint