python – Jython将图片转换为灰度,然后否定它

请耐心等待,我几周前才开始使用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

………………………………………….. ……………..

上一篇:python字典练习2


下一篇:buuctf rsa类题目(4)