我正在尝试创建一个平滑放大图像的程序。这样做的方法通常是用一个平均值替换一个elnarged图像中的每个像素,它的邻居。我在def平均功能中做到了这一点。但是我收到了这个错误:
newPixel = average(originalPixel,(originalPixel - 1),(originalPixel + 1))TypeError:不支持的操作数类型 - : 'Pixel'和'int'
我的代码如下所示,oldPixel是从图片中获取的originalPixel:
from cImage import*
def average(oldPixel, neighbour1, neighbour2):
newPixel = (neighbour1 + neighbour2 + oldPixel/3)
return newPixel
def averagePhoto(image):
mywin = ImageWin("image",1000,600)
oldimage = FileImage("image.gif")
oldimage.draw(mywin)
width = oldimage.getWidth()
height = oldimage.getHeight()
newim = EmptyImage(width,height)
for row in range(height):
for col in range(width):
originalPixel = oldimage.getPixel(col,row)
newPixel = average(originalPixel,(originalPixel - 1),(originalPixel+1))
newim.setPixel(col,row,newPixel)
newim.setPosition(width+1,0)
newim.draw(myimagewindow)
myimagewindow.exitOnClick()
有人能弄明白问题是什么吗?
谢谢
答案 0 :(得分:3)
除了:
originalPixel = oldimage.getPixel(col,row)
你需要:
rightNeignbor = oldimage.getPixel(col+1,row)
leftNeignbor = oldimage.getPixel(col-1,row)
我建议包括位于给定像素的北,东北,东,东南,南,西南,西和西北的像素。
然后你需要平均我假设的颜色值。
您需要平均所有值(第二个括号错位):
newPixel = (neighbour1 + neighbour2 + oldPixel) / 3
返回cImage文档,有一个红色,绿色,蓝色像素属性,您可能需要一次平均一个。平均时,除以浮点数并舍入为整数。