我应该写以下。
为一个过程 generalTransform 编写合同和实现,该过程接受图像和一个转换像素并返回一个新图像的过程,其中所有原始像素都由给定过程转换。
我们应该编写其他函数以及该作业的一部分。我在下面列出了我使用它们的那些。他们所做的是写在 docString 中。
def sepiaTone(p):
""" which calls for writing a pixel function for sepia toning"""
red = p.getRed()
green = p.getGreen()
blue = p.getBlue()
newR = (red * .393 + green*.769 + blue * .189)
if newR > 254:
newR = 255
newG = (red * .349 + green*.686 + blue * .168)
if newG > 254:
newG = 255
newB = (red * .272 + green*.534 + blue * .131)
if newB > 254:
newB = 255
newPixel = (newR,newG,newB)
return newPixel
.
def gammaTwo(p):
"""takes a pixel and performs a gamma correction with the gamma value of 2.0."""
R = p.getRed()
G = p.getGreen()
B = p.getBlue()
Y = 0.00117 * R + 0.00230 * G + 0.000447 * B
Y2 = Y**2
U = -0.000577 * R - 0.00113 * G + 0.00171 * B
V = 0.00241 * R - 0.00202 * G - 0.00039 * B
R = 255 * (Y2 + 1.13983 * V)
G = 255 * (Y2 - 0.39465 * U - 0.58060 * V)
B = 255 * (Y2 + 2.03211 * U)
if R > 254:
R = 255
if G > 254:
G = 255
if B > 254:
B = 255
newPixel = (R,G,B)
return newPixel
.
def gammaHalf(p):
"""takes a pixel and performs a gamma correction with the gamma value of 0.5""""
R = p.getRed()
G = p.getGreen()
B = p.getBlue()
Y = 0.00117 * R + 0.00230 * G + 0.000447 * B
Y2 = Y**.5
U = -0.000577 * R - 0.00113 * G + 0.00171 * B
V = 0.00241 * R - 0.00202 * G - 0.00039 * B
R = 255 * (Y2 + 1.13983 * V)
G = 255 * (Y2 - 0.39465 * U - 0.58060 * V)
B = 255 * (Y2 + 2.03211 * U)
if R > 254:
R = 255
if G > 254:
G = 255
if B > 254:
B = 255
newPixel = (R,G,B)
return newPixel
.
def rotate(image):
"""takes an image and returns an image of the original image rotated 90 degrees clockwise"""
pic = FileImage(image)
oldw = pic.getWidth()
oldh = pic.getHeight()
myWin = ImageWin("Wild", oldw*2, oldh*2)
pic.draw(myWin)
newIm = EmptyImage(oldw,oldw)
for row in range (oldh):
for col in range(oldw):
oldPx = pic.getPixel(col,row)
newIm.setPixel(oldw-row,col,oldPx)
newIm.setPosition(oldh+1,0)
newIm.draw(myWin)
现在这就是我遇到问题的地方。这个函数当我运行它时,我得到一个错误
功能,
def generalTransform(image, pro):
"""takes an image and a procedure that transforms a pixel and returns a new image with all the original pixels transformed by the given procedure."""
pic = FileImage(image)
h = pic.getHeight()
w = pic.getWidth()
myWin = ImageWin('Wild', w, h)
pic.draw(myWin)
newIm = EmptyImage (w,h)
for row in range (h):
for col in range (w):
p = pic. getPixel(col, row)
pro(p)
newIm.draw(myWin)
错误消息:我不知道该怎么做。我哪里错了?wildLogo.gif 是记录图像的正确名称。
generalTransform("wildLogo.gif", rotate)
Traceback (most recent call last):
File "<pyshell#31>", line 1, in <module>
generalTransform("wildLogo.gif", rotate)
File "C:\Python33\image.py", line 92, in generalTransform
pro(p)
File "C:\Python33\image.py", line 99, in rotate
pic = FileImage(image)
File "C:\Python33\lib\site-packages\cImage.py", line 398, in __init__
super(FileImage, self).__init__(fname = thefile)
File "C:\Python33\lib\site-packages\cImage.py", line 241, in __init__
self.loadImage(fname)
File "C:\Python33\lib\site-packages\cImage.py", line 270, in loadTkImage
sufstart = fname.rfind('.')
AttributeError: 'Pixel' object has no attribute 'rfind'