在分色图片时捆绑RGB值

时间:2013-07-20 06:58:49

标签: python colors jython rgb posterization

我已经编写了一些代码来在python中对图像进行分色。

我正在循环并分别获取红色,绿色,蓝色值。有没有办法简化这个?

我遇到的障碍是每个RGB值需要单独处理,并且无法找到检查每个像素的RGB值并更改它们的方法,而不会使它比下面更麻烦。

此版本有效:

def posterize(pic):
  w=getWidth(pic)
  h=getHeight(pic)
  newPic=makeEmptyPicture(w,h)
  for x in range (0,w):
    for y in range (0,h):
      p=getPixel(pic,x,y)
      newPxl=getPixel(newPic,x,y)
      r=getRed(p)
      g=getGreen(p)
      b=getBlue(p)
      if (r<64):
        newR= 31
      if (r>63 and r<128):
        newR= 95
      if (r>127 and r<192):
        newR= 159
      if (r>191 and r<256):
        newR= 223

      if (g<64):
        newG= 31
      if (g>63 and g<128):
        newG= 95
      if (g>127 and g<192):
        newG= 159
      if (g>191 and g<256):
        newG= 223

      if (b<64):
        newB= 31
      if (b>63 and b<128):
        newB= 95
      if (b>127 and b<192):
        newB= 159
      if (b>191 and b<256):
        newB= 223

      setColor(newPxl, makeColor(newR,newG,newB))

  return (newPic)

这是我的新代码,但它不会更改RGB的值。

def posterize(pic):
  w=getWidth(pic)
  h=getHeight(pic)
  newPic=makeEmptyPicture(w,h)
  for x in range (0,w):
    for y in range (0,h):
      p=getPixel(pic,x,y)
      newPxl=getPixel(newPic,x,y)
      r=getRed(p)
      g=getGreen(p)
      b=getBlue(p)
      Value = [r,g,b]
      for i in Value:
        if (i<64 ):
          i = 31
        if (i>63 and i<128):
          i=  95
        if (i>127 and i<192):
          i =  159
        if (i>191 and i<256):
          i = 223

        setColor(newPxl,makeColor(r,g,b))

  return (newPic)

1 个答案:

答案 0 :(得分:0)

在我的逻辑错误的地方有一些指导。我解决了这个问题。

def posterize(pic):
  w=getWidth(pic)
  h=getHeight(pic)
  newPic=makeEmptyPicture(w,h)
  for x in range (0,w):
    for y in range (0,h):
      p=getPixel(pic,x,y)
      newPxl=getPixel(newPic,x,y)
      r=getRed(p)
      g=getGreen(p)
      b=getBlue(p)
      r = int( posterizeColor(r))
      g = int( posterizeColor(g))
      b =int( posterizeColor(b))

      setColor(newPxl, makeColor(r,g,b) )

  return (newPic)

def posterizeColor(i):
  if (i<64 ):
    return 31
  if (i>63 and i<128):
    return  95
  if (i>127 and i<192):
    return 159
  if (i>191 and i<256):
    return 223