0

我已经编写了一些代码来对 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)
4

1 回答 1

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
于 2013-07-20T14:59:19.280 回答