Я пытаюсь создать пару функций, которые будут увеличивать или уменьшать общую насыщенность цвета изображения. Я понимаю, что «насыщенность» по сути означает «дальше или ближе к серому», поэтому мне нужно либо увеличивать, либо уменьшать каналы 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(sat, sat, sat), но тот получился полностью черным с некоторыми белыми пятнами. Я не уверен, что еще делать в этот момент. Я был бы очень признателен за некоторые рекомендации.