Python中块图像的简单平滑

Python中块图像的简单平滑,python,python-3.x,image-processing,Python,Python 3.x,Image Processing,我试图帮助某人解决一个关于如何像计算机科学家一样思考的实践问题。我读过其他人也有同样的问题,但是没有一个答案是有用的,因为他们使用了我们还没有学到的东西。您将根据代码了解我们的级别。但基本上,它应该是for循环和if语句的组合,以平滑块状图像。这里是实践问题: 缩放过多的图像后,它可能看起来很块状。减少图像块状的一种方法是用周围像素的平均值替换每个像素。这具有平滑(或模糊)颜色变化的效果。编写一个函数smooth(imageFile),用于获取图像并返回与原始图像大小相同但颜色平滑的新图像。要使

我试图帮助某人解决一个关于如何像计算机科学家一样思考的实践问题。我读过其他人也有同样的问题,但是没有一个答案是有用的,因为他们使用了我们还没有学到的东西。您将根据代码了解我们的级别。但基本上,它应该是
for
循环和
if
语句的组合,以平滑块状图像。这里是实践问题:

缩放过多的图像后,它可能看起来很块状。减少图像块状的一种方法是用周围像素的平均值替换每个像素。这具有平滑(或模糊)颜色变化的效果。编写一个函数
smooth(imageFile)
,用于获取图像并返回与原始图像大小相同但颜色平滑的新图像。要使位置(c,r)处的像素平滑,您需要按如下方式平均九个值的颜色分量:

这是我们到目前为止的功能。。。它有点模糊了图像,但没有达到我认为问题所在的程度,因为它说这是错误的:

def smooth(imageFile):
    w = imageFile.getWidth()
    h = imageFile.getHeight()
    newImg = image.EmptyImage(w, h)

    for col in range(1, w-1):
        for row in range(1, h-1):
            pix = imageFile.getPixel(col, row)
            top = imageFile.getPixel(col, row-1)
            tr = imageFile.getPixel(col+1, row-1)
            r = imageFile.getPixel(col+1, row)
            br = imageFile.getPixel(col+1, row+1)
            bot = imageFile.getPixel(col, row+1)
            bl = imageFile.getPixel(col-1, row+1)
            l = imageFile.getPixel(col-1, row)
            tl = imageFile.getPixel(col-1, row-1)
            
            for x in range(-1, 1):
                for y in range(-1, 1):
                    if (-1 < x < w) and (-1 < y < h):
                        red = int((pix.getRed() + top.getRed() + tr.getRed() + r.getRed() + br.getRed() + bot.getRed() + bl.getRed() + l.getRed() + tl.getRed()) // 9)
                        green = int((pix.getGreen() + top.getGreen() + tr.getGreen() + r.getGreen() + br.getGreen() + bot.getGreen() + bl.getGreen() + l.getGreen() + tl.getGreen()) // 9)
                        blue = int((pix.getBlue() + top.getBlue() + tr.getBlue() + r.getBlue() + br.getBlue() + bot.getBlue() + bl.getBlue() + l.getBlue() + tl.getBlue()) // 9)
   
                        new_pix = image.Pixel(red, green, blue)
                        newImg.setPixel(col, row, new_pix)

    return newImg

def main():
    width = 100
    height = 50
    win = image.ImageWin(width*2, height)
    img = makeBlockImage(width, height, 10, 10, 1)
    img.draw(win)

    newimg = smooth(img)
    newimg.draw(win, width, 0)
    win.exitonclick()

if __name__ == "__main__":
    main()
def平滑(图像文件):
w=imageFile.getWidth()
h=imageFile.getHeight()
newImg=image.EmptyImage(w,h)
对于范围(1,w-1)中的列:
对于范围(1,h-1)中的行:
pix=imageFile.getPixel(列,行)
top=imageFile.getPixel(列,第1行)
tr=imageFile.getPixel(列+1,第1行)
r=imageFile.getPixel(列+1,行)
br=imageFile.getPixel(列+1,行+1)
bot=imageFile.getPixel(列,行+1)
bl=imageFile.getPixel(列-1,行+1)
l=imageFile.getPixel(列1,第行)
tl=imageFile.getPixel(列1,第1行)
对于范围(-1,1)内的x:
对于范围(-1,1)内的y:
如果(-1

请帮助并提供最基本的解决方案(如中所示,不要使用花哨的函数或任何东西……请使用for和if,就像您在代码中看到的那样)。提前谢谢你

为什么您删除了
import
语句,所以我们不知道您在使用哪些模块?为什么你没有分享你的图片和打开它的代码?我不知道这是必要的,对不起。它只是简单地使用了
导入图像
(对于创建块图像的函数,它使用了
导入随机
,之前是由教授创建的,但我认为平滑函数不需要
随机
)。我将在问题中添加主函数。