我需要找到每个像素的局部平均值--即特定像素及其周围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
发布于 2015-03-22 15:14:34
制作一份拷贝只意味着做一些类似的事情:
from copy import deepcopy
im_avg = deepcopy(im)
这意味着您可以进行计算并将结果保存到不同的数据结构中,以便原始值保留下来,以便在计算其他像素时使用。您需要使用deepcopy而不只是copy或im[:]
,因为它看起来您的图像是一组嵌套列表,在这种情况下,浅层复制不会完全隔离新的值集。
使用这种方法,您可以使用im_avg
来存储平均值,而不是使用原始im
来计算它们。
您拥有的用于平均计算的表达式看起来很合理,尽管您可以查看标准itertools模块来帮助简化它(如果您选择这样做)。
发布于 2015-03-22 15:15:01
可能建议制作图像数组的副本,以确保在计算本地平均值时不会修改原始图像数组。
从技术上讲,您不需要制作数组的副本,因为您可以创建一个与图像数组大小相同的新空白数组,并用值填充它。
从周围的3x3网格计算平均红色值的逻辑是正确的。
https://stackoverflow.com/questions/29191882
复制相似问题