用Python平滑大小调整后的图像

问题描述 投票:0回答:1

我正在通过How to Think Like a Computer Scientist进行工作,但是我被困在以下练习中:

将图像缩放过多后,它看起来像是块状的。减少图像块状性的一种方法是用周围像素的平均值替换每个像素。这样具有平滑颜色变化的效果。编写将图像作为参数并平滑图像的函数。您的函数应返回与旧图像相同但已平滑的新图像。

本教程提供了一个截断的图像模块,但是我应该能够在不使用PIL的情况下解决该问题。这是我到目前为止所拥有的:

import image
#image provided in tutorial
img = image.Image("luther.jpg")
win = image.ImageWin()
factor = 0

#resize the image
def resize(img, factor):
W = img.getWidth()
H = img.getHeight()

newW = int(W * factor)
newH = int(H * factor)

newImage = image.EmptyImage(newW, newH)

for col in range(newW):
    for row in range (newH):
        p = img.getPixel(col, row)
        newImage.setPixel(col * factor, row * factor, p)

newImage.draw(win)
img = newImage
return img
#smooth out the image   
def smooth(img):
    newImage = image.EmptyImage(img.getWidth(), img.getHeight())
    for col in range(img.getWidth()):
        for row in range(img.getHeight()):
            p1 = img.getPixel(col, row)
            p2 = img.getPixel(col+1, row)
            red1 = p1.getRed()
            red2 = p2.getRed()
            green1 = p1.getGreen()
            green2 = p2.getGreen()
            blue1 = p1.getBlue()
            blue2 = p2.getBlue()
            newRed = (red1 + red2)/2
            newGreen = (green1 + green2)/2
            newBlue = (blue1 + blue2)/2
            newPixel = image.Pixel(newRed, newGreen, newBlue)
            newImage.setPixel(col, row, newPixel)
    newImage.draw(win)

当我调用该函数时,出现“错误:赋值之前引用了局部变量red2。”我逐行处理了打印语句;在尝试创建newPixel之前,不会返回此错误消息。任何帮助将不胜感激。

python image image-processing smooth
1个回答
0
投票

您的代码包含空格和制表符。缩进级别可能不是您认为的那样,并且程序的块结构被弄乱了。在带有8个空格标签的编辑器中查看程序,理想情况下,该程序具有显示空白字符的选项,并查看程序是否看起来像您认为的那样。另外,停止混合空格和制表符。如果这样做,将会一遍又一遍地弄乱你。


0
投票

您的代码包含空格和制表符。缩进级别可能不是您认为的那样,并且程序的块结构被弄乱了。在带有8个空格标签的编辑器中查看程序,理想情况下,该程序具有显示空白字符的选项,并查看程序是否看起来像您认为的那样。另外,停止混合空格和制表符。如果这样做,将会一遍又一遍地弄乱你。


0
投票

您在定义调整大小的图像后的缩进不正确。

© www.soinside.com 2019 - 2024. All rights reserved.