如何使用 jython 调整整个图像
How do I adjust the Entire image using jython
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值转化为上面计算的灰度值。为此,我们将灰度值除以参考点的各个红、绿、蓝值,得到调整因子。
情况就是这样,之后图像会显示得更亮,我该怎么办,当前代码出现故障并使 windows 弹出 100 次,字面意思!
提前致谢!
我想我和你的任务是一样的。
你的问题是底部的 explore() 命令在你的循环中。所以每次循环你都会产生另一个图像。只需要把它拿出来,以便在循环完成后执行。
所以在你的代码中你要求 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
现在您可以使用循环将更改应用到整个图像。
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))
那么现在您可以使用 explore(pic) 显示您编辑过的图像。
请注意缩进,这就是为什么会弹出很多 windows。
这是完整的工作代码:
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)
想一个矩形,左上角为 x1 和 y1,矩形的左下角为 x2 和 y2
这四点应该能够像您在代码中已经为 x 和 y
一样创建一个可供选择的区域
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值转化为上面计算的灰度值。为此,我们将灰度值除以参考点的各个红、绿、蓝值,得到调整因子。
情况就是这样,之后图像会显示得更亮,我该怎么办,当前代码出现故障并使 windows 弹出 100 次,字面意思!
提前致谢!
我想我和你的任务是一样的。
你的问题是底部的 explore() 命令在你的循环中。所以每次循环你都会产生另一个图像。只需要把它拿出来,以便在循环完成后执行。
所以在你的代码中你要求 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
现在您可以使用循环将更改应用到整个图像。
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))
那么现在您可以使用 explore(pic) 显示您编辑过的图像。 请注意缩进,这就是为什么会弹出很多 windows。
这是完整的工作代码:
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)
想一个矩形,左上角为 x1 和 y1,矩形的左下角为 x2 和 y2 这四点应该能够像您在代码中已经为 x 和 y
一样创建一个可供选择的区域