Python PIL: изменить оттенок и насыщенность

Из GIMP я могу легко изменить оттенок и насыщенность. Например, ниже исходное изображение и окончательные результаты после установки оттенка на -90 и насыщенности на 100.

Как я могу получить те же результаты от Python PIL?

Исходное изображение

исходное изображение

Окончательное изображение

финальное изображение


person dridk    schedule 21.07.2014    source источник
comment
Аналогичный вопрос: stackoverflow.com/questions/7274221 /   -  person Tom Dalton    schedule 22.07.2014
comment
Это не то же самое. Я хочу повернуть оттенок.   -  person dridk    schedule 22.07.2014


Ответы (2)


Вы можете сделать это с комбинацией модулей colorsys и PIL, но это довольно медленно. colorsys позволяет изменить цветовое пространство на HSV, где легко изменить оттенок и насыщенность. Я беру насыщенность в степени 0,65, чтобы приблизиться к вашему примеру, он сохраняет диапазон 0,0-1,0, необходимый для colorsys, при увеличении средних значений.

import colorsys
from PIL import Image
im = Image.open(filename)
ld = im.load()
width, height = im.size
for y in range(height):
    for x in range(width):
        r,g,b = ld[x,y]
        h,s,v = colorsys.rgb_to_hsv(r/255., g/255., b/255.)
        h = (h + -90.0/360.0) % 1.0
        s = s**0.65
        r,g,b = colorsys.hsv_to_rgb(h, s, v)
        ld[x,y] = (int(r * 255.9999), int(g * 255.9999), int(b * 255.9999))

введите здесь описание изображения

person Mark Ransom    schedule 21.07.2014
comment
Кажется идеальным! Спасибо! Я попробую и продолжу свое обнаружение коричневого! - person dridk; 22.07.2014
comment
Оно работает! Но да, это немного медленно. Интересно, как это может быть быстрее - person dridk; 22.07.2014

Я бы рекомендовал преобразовать ваше изображение в массив numpy, а затем применить matplotlib Функция rgb_to_hsv: http://matplotlib.org/api/colors_api.html#matplotlib.colors.rgb_to_hsv Таким образом, вы можете избежать двойного цикла for, который, вероятно, приводит к медленному попиксельному методу с использованием colorsys.

person CnrL    schedule 22.07.2014