【问题标题】:smoothing a resized image in Python在 Python 中平滑调整大小的图像
【发布时间】:2013-08-17 01:55:24
【问题描述】:

我正在通过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 之前,不会返回此错误消息。 任何帮助将不胜感激。

【问题讨论】:

  • 你能发布完整的堆栈跟踪吗?我看不出这个函数是如何产生这个错误的。也许它来自其他地方。
  • 不幸的是,我无法发布完整的堆栈跟踪,因为教程中使用的活动代码解释器没有提供它,只是一条错误消息。 (我无法在 IDLE 中运行脚本,因为我不知道如何安装教程中使用的图像模块。)

标签: python image image-processing smooth


【解决方案1】:

您的代码混合了空格和制表符。缩进级别可能不是您认为的那样,并且程序的块结构混乱了。在具有 8 个空格选项卡的编辑器中查看您的程序,理想情况下可以选择显示空白字符,然后查看您的程序是否看起来像您想象的那样。此外,停止混合空格和制表符。如果你这样做,它会一次又一次地搞砸你。

【讨论】:

  • 仅使用空格重新缩进,仍然收到相同的错误消息。
猜你喜欢
  • 2010-10-18
  • 1970-01-01
  • 2011-02-19
  • 2013-10-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多