我对编程很陌生,尝试学习Python。我试图通过取每个像素及其相邻像素的平均值来平滑图像的像素。我成功地运行了以下内容。在
from cImage import *
import statistics as s
def smoothImg(oldimage):
theWindow = ImageWin("Smooth Image",1200,1200)
theImage = FileImage(oldimage)
theImage.draw(theWindow)
height = theImage.getHeight()
width = theImage.getWidth()
newImage = EmptyImage(width,height)
for row in range(height):
for col in range(width):
try:
pixelVal = theImage.getPixel(col-1,row-1)
except:
pixelVal = theImage.getPixel(col,row) #maybe change to "pass"
try:
pixelVal2 = theImage.getPixel(col-1,row)
except:
pixelVal2 = theImage.getPixel(col,row)
try:
pixelVal3 = theImage.getPixel(col-1,row+1)
except:
pixelVal3 = theImage.getPixel(col,row)
try:
pixelVal4 = theImage.getPixel(col,row-1)
except:
pixelVal4 = theImage.getPixel(col,row)
pixelVal5 = theImage.getPixel(col,row)
try:
pixelVal6 = theImage.getPixel(col,row+1)
except:
pixelVal6 = theImage.getPixel(col,row)
try:
pixelVal7 = theImage.getPixel(col+1,row-1)
except:
pixelVal7 = theImage.getPixel(col,row)
try:
pixelVal8 = theImage.getPixel(col+1,row+1)
except:
pixelVal8 = theImage.getPixel(col,row)
try:
pixelVal9 = theImage.getPixel(col+1,row)
except:
pixelVal9 = theImage.getPixel(col,row)
redMean = s.mean([pixelVal[0],pixelVal2[0],pixelVal3[0],pixelVal4[0],pixelVal5[0],pixelVal6[0],pixelVal7[0],pixelVal8[0],pixelVal9[0]])
greenMean = s.mean([pixelVal[1],pixelVal2[1],pixelVal3[1],pixelVal4[1],pixelVal5[1],pixelVal6[1],pixelVal7[1],pixelVal8[1],pixelVal9[1]])
blueMean = s.mean([pixelVal[2],pixelVal2[2],pixelVal3[2],pixelVal4[2],pixelVal5[2],pixelVal6[2],pixelVal7[2],pixelVal8[2],pixelVal9[2]])
meanPixel = Pixel(redMean,greenMean,blueMean)
newImage.setPixel(col,row,meanPixel)
newImage.setPosition(width+1,0)
newImage.draw(theWindow)
theWindow.exitOnClick()
return
这个程序似乎有效,但我无法想象这是最好的方法。另外,我希望能够获得更广泛的像素平均值,而不仅仅是一个近邻。我试着在for循环中运行这个函数,但是它给了我一个完全灰色的图像。在
^{pr2}$这个问题取自“上下文中的Python编程”。第222页练习6.25。在
目前没有回答
相关问题 更多 >
编程相关推荐