我需要找到每个像素的局部平均值 - 即特定像素的平均值和围绕它的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
答案 0 :(得分:1)
制作副本只是意味着做:
from copy import deepcopy
im_avg = deepcopy(im)
这意味着您可以进行计算并将结果保存到不同的数据结构中,以便原始值可以用于计算其他像素。您需要使用深度复制而不仅仅是复制或im[:]
,因为它看起来像您的图像是一组嵌套列表,在这种情况下,浅复制不会完全隔离新的值集。
使用此功能,您可以使用im_avg
存储平均值,但使用原始im
来计算它们。
您对平均计算的表达式看起来是合理的,但您可以查看标准的itertools模块,以便在您选择时帮助简化它。
答案 1 :(得分:1)
可能建议制作图像数组的副本,以确保在计算局部平均值时不修改原始图像数组。
从技术上讲,您不需要复制数组,因为您可以创建一个与图像数组大小相同的新空白数组,并用值填充它。
计算围绕它的3x3网格的平均红色值的逻辑是正确的。