0

我正在尝试定义一个函数,该函数将在不使用 PIL 的情况下在 python 中模糊图像。每个像素的颜色需要与周围 8 个像素的颜色进行平均,即:

o 的值需要与 x 的所有值进行平均。

x x x
x o x
x x x

我有:

def blur():
global photo
pixels = Image.getPixels(photo)
for row in range(photo.height()):
    for col in range(photo.width()):
        red = pixels[row][col][0]
        green = pixels[row][col][1]
        blue = pixels[row][col][2]
Image.setPixels(photo,pixels)

其中 Image.getPixels() 返回同一列表中 0 到 255 之间的红色、绿色和蓝色值([0] 返回红色,[1] 返回绿色,[2] 返回蓝色),并表示它们的 x 和 y 值按行和列。我已经相当广泛地搜索了正确方向的提示,但没有找到任何相关的东西。任何想法/帮助将不胜感激。谢谢!

4

2 回答 2

1

我认为这是家庭作业,所以我不会写出代码。您可能可以使用 numpy vectorize ,这里是一个指针How to vectorize this python code?将上面的三个和下面的三个相加,然后硬代码将两个加到一边并除以 8。然后在一个新的三维数组中重新分配红色蓝色和绿色,您可以将其预先分配为旧图像的大小。

于 2013-10-28T18:38:18.087 回答
0

Ofc 要计算 8 个元素的平均值,你需要这些元素的总和,所以从那个开始。让我们想想这些元素会有什么索引。如果中间的像素是[x][y],那么它右边的像素将有[x+1][y],而它上面的像素将有[x][y+1]。找出您需要的所有八个索引,然后将这 8 个值相加。最后将结果除以 8。同样重要的是使用两个不同的表(只需将图像复制到另一个表) - 一个您从中获取值以计算平均值,第二个您保存新像素,因为否则,仅使用一个表来计算下一个像素,您将使用您已经更改的像素的平均值。

于 2016-08-01T07:21:44.813 回答