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