Python 制作图像阵列的副本意味着什么?

Python 制作图像阵列的副本意味着什么?,python,Python,我需要找到每个像素的局部平均值——也就是说,一个特定像素和它周围的8个像素的平均值来模糊图像。有人暗示我需要制作图像阵列的副本 制作图像阵列的副本意味着什么?另外,我如何表示我想要周围的像素?如果我想找到像素的平均红色值,我会使用以下表达式: im[row][col][0] = sum(im[row][col][0],im[row-1][col][0],im[row+1][col][0],im[row][col-1][0],im[row][col+1][0],im[row-1][col+1][0

我需要找到每个像素的局部平均值——也就是说,一个特定像素和它周围的8个像素的平均值来模糊图像。有人暗示我需要制作图像阵列的副本

制作图像阵列的副本意味着什么?另外,我如何表示我想要周围的像素?如果我想找到像素的平均红色值,我会使用以下表达式:

im[row][col][0] = sum(im[row][col][0],im[row-1][col][0],im[row+1][col][0],im[row][col-1][0],im[row][col+1][0],im[row-1][col+1][0],im[row+1][col+1][0],im[row-1][col-1][0],im[row+1][col-1][0])/9

复制只意味着做一些事情,比如:

from copy import deepcopy

im_avg = deepcopy(im)
这意味着您可以进行计算并将结果保存到不同的数据结构中,以便原始值保留在其他像素的计算中使用。您需要使用deepcopy,而不仅仅是copy或
im[:]
,因为您的图像看起来像是一组嵌套列表,在这种情况下,浅拷贝不会完全隔离新的值集

使用此选项,您将使用
im_avg
存储平均值,但使用原始
im
计算它们


用于平均值计算的表达式看起来很合理,但如果您愿意,可以查看标准的itertools模块以帮助简化它。

可能建议复制图像数组,以确保在计算局部平均值时不修改原始图像数组

从技术上讲,您不需要制作数组的副本,因为您可以创建一个与图像数组大小相同的新空白数组,并用值填充它


您从周围3x3网格计算平均红色值的逻辑是正确的。

请详细说明from import语句好吗?“copy”或“deepcopy”是复制的数组,将在其中重新分配值?此外,用于求平均值的表达式返回一个错误:“求和最多2个参数,得到9”。@pubkitty
from copy import deepcopy
从stdlib模块
copy
导入名为
deepcopy
的函数。调用此函数(即,
im_avg
)的结果是复制的数据结构-因此您可以执行
im_avg[row][col][0]=sum(…)
。sum的错误是因为它希望所有被求和的东西都捆绑到一个iterable中,所以将它们包装到另一组
()
中,将它们放在一个元组中,它会很高兴。