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