请耐心等待,我几周前才开始使用python.
我正在使用JES.
我已经制作了将图片转换为灰度的功能.我为每种颜色r和r1,g和g1,b和b1创建了两个名称.这背后的想法是将原始值保留在内存中,因此图片可以恢复为原始颜色.
def grayScale(pic):
for p in getPixels(pic):
r = int(getRed(p))
g = int(getGreen(p))
b = int(getBlue(p))//I have tried this with and without the int()
r1=r
g1=g
b1=b
new = (r + g + b)/3
color= makeColor(new,new,new)
setColor(p, color)
def restoreColor(pic):
for p in getPixels(pic):
setColor (p, makeColor(r1,g1,b1))
它不起作用.错误:“找不到本地或全局名称.”
我理解为什么我会收到此错误.
但是,如果我尝试在restoreColor中定义它们,它将给出灰度值.
我理解为什么我收到此错误,但不知道如何格式化我的代码,以保存名称值.我查看了有关本地和全局变量/名称的问题;但在我学到的基本语法中,我无法解决这个问题.
问题是:
如何创建名称并获取原始(红色,绿色,蓝色)的值,然后我可以在另一个函数中使用它们?我尝试的所有东西都返回了改变的(灰度)值.日Thnx
解决方法:
只是为了增加一个“艺术”的观点:
您在程序中使用(r g b)/ 3,但还有其他算法:
1)亮度方法平均最突出和最不突出的颜色:
(max(R, G, B) + min(R, G, B)) / 2
2)平均方法(你的)简单地平均值:
(R + G + B) / 3
3)发光度方法是平均方法的更复杂版本.它还对这些值进行平均,但它形成了一个加权平均值来说明人类的感知.我们对绿色比其他颜色更敏感,所以绿色最重要.发光度的公式是:
0.21 R + 0.71 G + 0.07 B
这可以产生很大的不同(光度远远超过对比度):
original | average | luminosity
………………………………………….. ..
代码:
px = getPixels(pic)
level = int(0.21 * getRed(px) + 0.71 * getGreen(px) + 0.07 * getBlue(px))
color = makeColor(level, level, level)
并且否定/反转,只需:
level = 255 - level
哪个给:
def greyScaleAndNegate(pic):
for px in getPixels(pic):
level = 255 - int(0.21*getRed(px) + 0.71*getGreen(px) +0.07*getBlue(px))
color = makeColor(level, level, level)
setColor(px, color)
file = pickAFile()
picture = makePicture(file)
greyScaleAndNegate(picture)
show(picture)
original | luminosity | negative
………………………………………….. ……………..