Przelicz zapis HSV na wartości RGB

Ostatnia aktualizacja treści:

Wpisz odcień, nasycenie i jasność, a kanały RGB pojawią się w trakcie pisania: hsv(217.2, 76%, 96.5%) to rgb(59, 130, 246). Pole przyjmuje stopnie i procenty z Photoshopa albo Figmy, trójkę liczb z OpenCV i ułamki z Pythona. Właściwy zapis wybierz przełącznikiem Zapis HSV przed wklejeniem liczb, bo gdy w polu jest już kolor, przełącznik przepisuje go na ten sam kolor w nowym zapisie.

Wpisz odcień w stopniach, a nasycenie i jasność w procentach. Wartości możesz rozdzielić przecinkami albo spacjami.

Zapis HSV

Stopnie i procenty pokazują Photoshop i Figma. OpenCV zapisuje odcień od 0 do 179, a nasycenie i jasność od 0 do 255. Ułamki 0–1 zwracają colorsys w Pythonie i Unity.

na

Co oznaczają trzy liczby HSV?

Pierwsza liczba to odcień (H), zapisany jako kąt na kole barw: 0° to czerwień, 120° zieleń, a 240° niebieski[1]. Druga to nasycenie (S), a trzecia to jasność (V). W Photoshopie ten sam model nazywa się HSB, a pomoc Adobe nazywa jego składowe barwą, nasyceniem i jasnością[2].


Nasycenie i jasność najłatwiej zrozumieć przez farby. Alvy Ray Smith, który opisał ten model w 1978 roku, porównał je do dodawania bieli i czerni do czystej barwy: niższe nasycenie to więcej bieli, a niższa jasność to więcej czerni[3]. Dlatego przy jasności 0% kolor jest czarny bez względu na dwie pozostałe liczby, a przy nasyceniu 0% zostaje szarość o tej jasności.

Kolorowe karty z próbkami ułożone w koło na jasnym stole
Karty z próbkami kolorów ułożone w koło, od żółci przez zielenie i błękity po fiolety, róże i czerwienie. Odcień w HSV mówi, w którym miejscu takiego koła leży kolor, a kąt liczy się od czerwieni. Zdjęcie: Andy Brown, Unsplash.

Jeśli kolor masz w innym zapisie, na przykład w OKLCH, Lab albo jako kod z Androida, konwerter kolorów pokaże go naraz we wszystkich zapisach.

Jak przeliczyć HSV na RGB?

Najpierw policz chromę, czyli rozpiętość kanałów: C = V × S. Potem podziel odcień przez 60°. Część całkowita wyniku wskazuje jeden z sześciu wycinków koła, a z reszty liczysz kanał pośredni: X = C × (1 − |(H ÷ 60°) mod 2 − 1|). Na koniec do wszystkich kanałów dodajesz m = V − C[4].


Weźmy hsv(217.2, 76%, 96.5%). Chroma to 0,965 × 0,76 = 0,733. Odcień podzielony przez 60° daje 3,62, czyli wycinek między 180° a 240°, w którym czerwony kanał jest zerowy, zielony pośredni, a niebieski pełny. Kanał pośredni wynosi 0,733 × (1 − |1,62 − 1|) = 0,279, a m = 0,965 − 0,733 = 0,232.


Po dodaniu m kanały mają 0,232, 0,511 i 0,965. Po pomnożeniu przez 255 i zaokrągleniu wychodzi rgb(59, 130, 246), a kod HEX tego koloru poda konwerter RGB na HEX.

Jakie kolory RGB leżą na kole barw co 30°?

Tabela pokazuje dwanaście odcieni przy pełnym nasyceniu i pełnej jasności, czyli czyste barwy z brzegu koła. Wartości RGB i kody HEX policzył konwerter.
Zapis HSVWartości RGBKod HEX
hsv(0, 100%, 100%)rgb(255, 0, 0)#FF0000
hsv(30, 100%, 100%)rgb(255, 128, 0)#FF8000
hsv(60, 100%, 100%)rgb(255, 255, 0)#FFFF00
hsv(90, 100%, 100%)rgb(128, 255, 0)#80FF00
hsv(120, 100%, 100%)rgb(0, 255, 0)#00FF00
hsv(150, 100%, 100%)rgb(0, 255, 128)#00FF80
hsv(180, 100%, 100%)rgb(0, 255, 255)#00FFFF
hsv(210, 100%, 100%)rgb(0, 128, 255)#0080FF
hsv(240, 100%, 100%)rgb(0, 0, 255)#0000FF
hsv(270, 100%, 100%)rgb(128, 0, 255)#8000FF
hsv(300, 100%, 100%)rgb(255, 0, 255)#FF00FF
hsv(330, 100%, 100%)rgb(255, 0, 128)#FF0080
Przy pełnym nasyceniu i jasności jeden kanał ma zawsze 255, a inny 0. Obniżenie jasności do 50% zmniejsza niezerowe kanały mniej więcej o połowę, na przykład hsv(0, 100%, 50%) to rgb(128, 0, 0).

Czy liczby całkowite z Figmy dają dokładnie ten sam kolor?

Nie zawsze. Figma zapisuje HSB liczbami całkowitymi[5], a zaokrąglony odcień, nasycenie albo jasność potrafią przesunąć kanał RGB o jedną jednostkę. Tabela porównuje wyniki konwertera dla tego samego koloru zapisanego dokładnie i w zaokrągleniu.
Zapis HSVWartości RGBKod HEX
hsv(217.2, 76%, 96.5%)rgb(59, 130, 246)#3B82F6
hsv(217, 76%, 96%)rgb(59, 130, 245)#3B82F5
hsv(217, 76%, 97%)rgb(59, 131, 247)#3B83F7
hsv(142.1, 82.7%, 77.3%)rgb(34, 197, 94)#22C55E
hsv(142, 83%, 77%)rgb(33, 196, 93)#21C45D
Sprawdziliśmy to na wszystkich 16 777 216 kolorach RGB: po zaokrągleniu HSV do liczb całkowitych ponad 14,7 mln z nich wraca jako inny kolor, a z jednym miejscem po przecinku wraca każdy. Dlatego konwerter RGB na HSV podaje wynik z jednym miejscem po przecinku.

Jak zapisać kolor HSV w CSS?

CSS nie ma funkcji hsv(), ale ma hwb(), w której po odcieniu podajesz ilość bieli i czerni domieszanej do barwy[6]. Model HWB opisał ten sam Alvy Ray Smith w 1996 roku, a z HSV przelicza się go dwoma prostymi wzorami: W = (1 − S) × V oraz B = 1 − V[7].


Dla hsv(217.2, 76%, 96.5%) biel wynosi (1 − 0,76) × 0,965 = 23,1%, a czerń 1 − 0,965 = 3,5%, więc w arkuszu stylów wpiszesz hwb(217.2 23.1% 3.5%). Przeglądarka pokaże ten sam kolor co rgb(59, 130, 246). Jeśli wolisz zapis, który rozumie każde narzędzie, wklej po prostu wynik tego konwertera.

Dlaczego trójka z OpenCV wraca jako trochę inny kolor?

OpenCV zapisuje odcień obrazu 8-bitowego jako połowę kąta, żeby zmieścił się w jednym bajcie[8]. Kolejne wartości odcienia różnią się więc o 2°, a kolor pomiędzy nimi nie ma dokładnego zapisu. Trójka 109, 194, 246, którą OpenCV daje dla rgb(59, 130, 246), wraca przy opcji OpenCV jako rgb(59, 127, 246), czyli z zielonym kanałem niższym o 3. OpenCV zwraca dokładnie to samo: porównaliśmy opcję OpenCV z OpenCV.js 4.10 na wszystkich trójkach z odcieniem od 0 do 180.


Jeśli wynik ma trafić z powrotem do obrazu wczytanego przez cv2.imread, użyj stałej cv2.COLOR_HSV2BGR, bo taki obraz trzyma kanały w kolejności niebieski, zielony, czerwony[9].

Jakie zapisy HSV obsługuje ten konwerter?

Każdy z tych zapisów pole przyjmuje i przelicza, więc nie trzeba niczego poprawiać przed wklejeniem. Tabela pokazuje, co konwerter robi z każdym z nich, a wyniki policzył on sam przy opcji 0–360°, 0–100%, chyba że uwaga mówi inaczej.
Co wpisujeszCo pokaże konwerterJak to czytamy
hsv(217.2, 76%, 96.5%)rgb(59, 130, 246)Zapis z nawiasem, taki jak wynik konwertera RGB na HSV, przyjmujemy bez zmian.
hsb(217.2, 76%, 96.5%)rgb(59, 130, 246)Nazwę HSB traktujemy jak HSV, bo to ten sam model.
H 217,2 S 76 B 96,5rgb(59, 130, 246)Litery pól z próbnika Photoshopa pomijamy, a przecinek między cyframi czytamy jako dziesiętny.
217,2° 76% 96,5%rgb(59, 130, 246)Znak stopnia i procenty przyjmujemy razem z liczbami.
217,2 76 % 96,5 %rgb(59, 130, 246)Spację między liczbą a znakiem procentu pomijamy.
0,6034 0,7602 0,9647rgb(59, 130, 246)Trzy ułamki nie większe od 1 poznajemy jako zapis z Pythona i czytamy tak jak przy opcji 0–1.
hsva(217.2, 76%, 96.5%, 0.5)rgba(59, 130, 246, 0.5)Czwartą liczbę bierzemy jako krycie i przenosimy do wyniku w postaci rgba.
[109 194 246]rgb(59, 127, 246)Tablicę NumPy wypisaną przez Pythona czytamy przy opcji OpenCV razem z nawiasami.
hsv(217.2, 76%, 96.5%rgb(59, 130, 246)Brak nawiasu zamykającego to literówka, więc liczby i tak odczytujemy.

Konwertuj inne jednostki na RGB

Źródła

  1. HSV (grafika) — Wikipedia
  2. Wybieranie kolorów w programie Photoshop — Adobe
  3. Color Gamut Transform Pairs (SIGGRAPH 78) — Alvy Ray Smith
  4. HSL and HSV — HSV to RGB — Wikipedia (wersja angielska)
  5. About color models — Figma Help Center
  6. CSS Color Module Level 4 — HWB Colors: hwb() function — W3C
  7. HWB — A More Intuitive Hue-Based Color Model — Alvy Ray Smith
  8. Color conversions: RGB ↔ HSV — OpenCV
  9. Image file reading and writing: imread — OpenCV
  10. colorsys — Conversions between color systems — Python Software Foundation

Wszystkie wartości w tabelach wyliczyliśmy z definicji jednostek i sprawdziliśmy rachunkowo przed publikacją. Dane historyczne i nazwy lokalnych jednostek opieramy na źródłach wymienionych wyżej.

Ostatnia aktualizacja treści: · przygotował i sprawdził zespół Arteon

Najczęstsze pytania o przeliczanie HSV na RGB

Co się stanie, gdy wpiszę odcień większy niż 360° albo ujemny?

Konwerter obróci go na kole barw tak jak CSS, więc 480° to to samo co 120°, a −120° to to samo co 240°. hsv(480, 100%, 100%) da zatem zieleń rgb(0, 255, 0).

Dlaczego konwerter nie przyjmuje nasycenia 194?

Przy opcji 0–360°, 0–100% nasycenie i jasność mają najwyżej 100. Liczba większa bez znaku procentu to zwykle skala od 0 do 255 z OpenCV, więc zamiast przyciąć ją po cichu do 100%, konwerter pokazuje komunikat. Przełącz wtedy Zapis HSV na OpenCV (0–179, 0–255).

Czy przy zapisie 0–1 odcień też jest ułamkiem?

Tak. Moduł colorsys w Pythonie podaje wszystkie trzy liczby od 0 do 1[10], więc odcień to ułamek pełnego obrotu. 0,6034 × 360° daje 217,2°.

Jak przeliczyć HSV na kod HEX?

Przelicz zapis tutaj, a potem wklej wynik do konwertera RGB na HEX. Kolor zobaczysz od razu w kwadratowej próbce obok pola, a kliknięcie próbki otworzy systemowy selektor barwy.

Jak przeliczyć RGB na HSV?

Wpisz kanały do konwertera RGB na HSV. Przycisk Zmień kolejność przeniesie Cię tam razem z bieżącym wynikiem.

Zrzut ekranu darmowego narzędzia Arteon: Przelicz zapis HSV na wartości RGB

Pomóż nam ulepszyć narzędzia

Masz pomysł na nową funkcję, widzisz błąd lub chcesz zaproponować inne narzędzie? Napisz do nas.