Из GIMP я могу легко изменить оттенок и насыщенность. Например, ниже исходное изображение и окончательные результаты после установки оттенка на -90 и насыщенности на 100.
Как я могу получить те же результаты от Python PIL?
Из GIMP я могу легко изменить оттенок и насыщенность. Например, ниже исходное изображение и окончательные результаты после установки оттенка на -90 и насыщенности на 100.
Как я могу получить те же результаты от Python PIL?
Вы можете сделать это с комбинацией модулей 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))
Я бы рекомендовал преобразовать ваше изображение в массив numpy, а затем применить matplotlib Функция rgb_to_hsv: http://matplotlib.org/api/colors_api.html#matplotlib.colors.rgb_to_hsv Таким образом, вы можете избежать двойного цикла for, который, вероятно, приводит к медленному попиксельному методу с использованием colorsys.