如何使用jython调整整个图像

时间:2016-03-25 03:20:10

标签: python jython jes

def whiteBalance():
 myFile = pickAFile()
 print myFile
 myPicture = makePicture(myFile)
 print myPicture
 explore(myPicture)
 xRef = requestInteger("Enter the X Value of the Reference Point")
 yRef = requestInteger("Enter the Y value of the Reference Point")
   for p in getPixels(myPicture):
     average = (getRed(p)+getGreen(p)+getBlue(p))/3
     setColor(p,makeColor(average,average,average))
       for px in getPixels(myPicture):
          newRed = getRed(px) * 0.9
          newGreen = getGreen(px) * 0.944
          newBlue = getBlue(px) * 1.20

          explore(myPicture)

以上是我的代码!我试图制作一个图像,并使用whiteBalance()使其更白。

继承我的计划

计算参考点的灰度值 - 像素的灰度值是其红色,绿色和蓝色值的平均值。例如,在该示例中,此阶段的参考点的RGB值将为151,161和137.因此,灰度值应为149.66 ...

计算R,G,B调整因子 - 我们希望将参考点的RGB值转换为上面计算的灰度值。为此,我们将灰度值除以参考点处的红色,绿色,蓝色值,并获得调整因子。

那就是这个场景,之后图像将显示得更亮,我能做什么,这个当前的代码会出现故障并使窗口弹出100次,字面意思!

提前致谢!

4 个答案:

答案 0 :(得分:0)

我想我和你的任务相同。

你的问题是底部的explore()命令在你的循环中。所以每次循环都会产生另一个图像。只需要将它带出来,以便在循环完成后执行。

答案 1 :(得分:0)

所以在你的代码中你要求x和y但不用它来计算灰度值?此外,这些数字来自哪里? (你用来制作新的红色,绿色和蓝色值的那个?)

我将解释每一步,但不要只是复制代码,尝试理解并再次编写代码。人们如何学习编程。祝你好运!

使用它来选择一个文件,将其制作成图片并显示出来以供日后比较。

def whiteBalance():
 file = pickAFile()
 pic = makePicture(file)
 explore(pic)

然后询问用户图片中的参考点

x = requestInteger ("Please specify X-coordinate")
y = requestInteger ("Please specify Y-coordinate")

然后获取用户刚给你的特定像素的RGB值

pixel = getPixelAt(pic,x,y)

从该像素中拉出R,G,B值以用于计算灰度值

red = getRed(pixel)
green = getGreen(pixel)
blue = getBlue(pixel)
average = (red+green+blue)/3.00

然后计算R,G,B调整因子。

redadj = average /red
greenadj = average /green
blueadj = average /blue

现在,您可以使用循环将更改应用于整个immage。

for r in getPixels(pic):
  value = getRed(r)
  setRed(r, (value* redadj))

for g in getPixels(pic):
  value = getGreen(g)
  setGreen(g, (value* greenadj))

for b in getPixels(pic):
  value = getBlue(b)
  setBlue(b, (value* blueadj))

然后现在您可以使用探索(图片)显示您编辑的图像。 请注意缩进,这就是为什么你会弹出很多窗口的原因。

答案 2 :(得分:0)

以下是完整的代码:

def whiteBalance():
 file = pickAFile()
 pic = makePicture(file)
 explore(pic) #open original picture for comparison 

 #Pick a picture then ask for a pixel in the picture.

 x = requestInteger ("Please specify X-coordinate")
 y = requestInteger ("Please specify Y-coordinate")

 pixel = getPixelAt(pic,x,y)

 #Get the RGB value of the given pixel.

 red = getRed(pixel)
 green = getGreen(pixel)
 blue = getBlue(pixel)

 #The grey value of the pixel is the average of its red, green and blue values.

 average = (red+green+blue)/3.00

 #Calculation of R, G, B adjustment factors.

 redadj = average /red
 greenadj = average /green
 blueadj = average /blue

 #Adjustment of the entire image.

 for r in getPixels(pic):
  value = getRed(r)
  setRed(r, (value* redadj))

 for g in getPixels(pic):
  value = getGreen(g)
  setGreen(g, (value* greenadj))

 for b in getPixels(pic):
  value = getBlue(b)
  setBlue(b, (value* blueadj))

 #Display the edited image.

 explore(pic)

有很多方法可以将RGB循环变成一个循环,可能是这样的:

 for p in getPixels(pic):
  newRed = getRed(p)*redadj
  newBlue = getBlue(p)*blueadj
  newGreen = getGreen(p)*greenadj
  setRed(p,newRed)
  setGreen(p,newGreen)
  setBlue(p,newBlue)

答案 3 :(得分:0)

想到一个矩形,左上角是x1和y1,矩形的左下角是x2和y2  这四个点应该能够像你已经在x和y的代码中一样选择一个区域