ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

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

2019-10-02 03:55:08  阅读:197  来源: 互联网

标签:grayscale invert python jython jes


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

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

标签:grayscale,invert,python,jython,jes
来源: https://codeday.me/bug/20191002/1840982.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有