Преобразование цветовых кодов hsl в hsv и наоборот в Python

В настоящее время я пытаюсь преобразовать цветовые коды hsl в hsv и наоборот в Python, но не могу найти простой способ сделать это.

Я попытался преобразовать коды косвенно, преобразовав hsl в rgb и rgb в hsv с помощью пакета colorsys. К сожалению, по какой-то причине это не работает. Я всегда получаю невероятно маленькие значения (‹0, так что это не имеет никакого смысла).

Вот что я сделал:

import colorsys

def hsv_to_hsl(hsv):
    h, s, v = hsv
    rgb = colorsys.hsv_to_rgb(h,s,v)
    r, g, b = rgb
    hls = colorsys.rgb_to_hls(r,g,b)
    return hls

hsv = (300, 65, 40)

print(hsv)
print(hsv_to_hsl(hsv))

Я также попытался написать свою собственную функцию, основанную на функции javascript, которую нашел на Github, но я получаю там те же странные значения (см. Ниже код для преобразования hsv в hsl). Проблема в том, что я действительно не нашел формулы в Википедии, поэтому я даже не знаю, имеет ли смысл то, что я вычислил ниже.

import math
def hsv_to_hsl(hsv):
h,sat,val = hsv

# hue h stays the same

# saturation s
if (2-sat)*val < 1:
    s = sat*val / ((2-sat)*val)
else: s = sat*val / (2-(2-sat)*val)

# lightness l
l = 2-sat * val/2 

# return code as tuple
return (h, s, l)

Есть ли простой способ сделать это с помощью пакета или у вас есть представление о том, что я мог бы сделать по-другому в своей функции?

Заранее спасибо за помощь!

Мерль


person Merle    schedule 16.11.2020    source источник
comment
en.wikipedia.org/wiki/HSL_and_HSV#Interconversion   -  person Giacomo Catenazzi    schedule 16.11.2020


Ответы (1)


Вы можете проверить модуль colorsys:

https://docs.python.org/3.7/library/colorsys.html

Примеры с сайта:

colorsys.rgb_to_yiq(r, g, b)
#Convert the color from RGB coordinates to YIQ coordinates.

colorsys.yiq_to_rgb(y, i, q)
#Convert the color from YIQ coordinates to RGB coordinates.

colorsys.rgb_to_hls(r, g, b)
#Convert the color from RGB coordinates to HLS coordinates.

colorsys.hls_to_rgb(h, l, s)
#Convert the color from HLS coordinates to RGB coordinates.

colorsys.rgb_to_hsv(r, g, b)
#Convert the color from RGB coordinates to HSV coordinates.

colorsys.hsv_to_rgb(h, s, v)
#Convert the color from HSV coordinates to RGB coordinates.

Из этого вы можете преобразовать hls - ›rgb -› hsv

person pigeon_the_programmer    schedule 16.11.2020
comment
Здравствуйте, спасибо за ответ! Как я уже упоминал выше, я уже пробовал это (по сути, мой первый подход), но он не работает. По какой-то причине это дает отрицательные значения. - person Merle; 16.11.2020