我正在尝试创建一对能够增加或减少图像整体色彩饱和度的功能。我知道“饱和度”本质上意味着“更远或更接近灰色”,所以我需要增加或减少RGB通道,但我不能同等地完成它们(即r * 2,g * 2,b * 2)因为这只会使图像变亮。
我试图使用这里给出的公式:http://www.georeference.org/doc/colors_as_hue_saturation_and_brightness.htm但是当我尝试在我的代码中使用它时,图像几乎完全是黑色的,有一些黄色斑点。
这是我到目前为止所尝试的内容:
def upSaturation(pictu):
'''Takes a picture and increases the overall color saturation'''
satuP = duplicatePicture(pictu)
for pixel in getPixels(satuP):
r = getRed(pixel)
g = getGreen(pixel)
b = getBlue(pixel)
mn = min(r, g, b)
mx = max(r, g, b)
lht = (mx + mn) / 2
if lht <= 128:
satu = 255 * ((mx - mn) / (mx + mn))
clr = makeColor(r * satu, g * satu, b * satu)
setColor(pixel, clr)
else:
sat = 255 * ((mx - mn) / (511 - (mx + mn)))
color = makeColor(r * sat, g * sat, b * sat)
setColor(pixel, color)
show(satuP)
return satuP
我也尝试过使用makeColor(坐着,坐着,坐着)但是那个完全是黑色的,带有一些白色斑点。我不知道此时还有什么可做的。我非常感谢一些指导。
答案 0 :(得分:1)
要增加饱和度,您必须增加原色的值。例如,如果像素主要是红色,则必须增加像素的红色内容并减少其余部分。
def upSaturation(pictu):
'''Takes a picture and increases the overall color saturation'''
satuP = duplicatePicture(pictu)
for pixel in getPixels(satuP):
r = getRed(pixel)
g = getGreen(pixel)
b = getBlue(pixel)
# check if red is primary colour
if r > g and r > b:
# Saturate with red
r = r + 5
if g < b:
g = g - 5
else:
b = b - 5
# check if green is primary colour
if g > r and g > b:
# Saturate with green
g = g + 5
if r < b:
r = r - 5
else:
b = b - 5
# check if blue is primary colour
if b > r and b > g:
# Saturate with blue
b = b + 5
if r < g:
r = r - 5
else:
g = g - 5
color = makeColor(r, g, b)
setColor(pixel, color)
explore(satuP)
return satuP