Převeď hodnoty HSV na RGB

Poslední revize obsahu:

Zadej odstín, sytost a jas a kanály RGB se ukážou už při psaní: hsv(217.2, 76%, 96.5%) je rgb(59, 130, 246). Pole přijme stupně a procenta z Photoshopu nebo Figmy, tři čísla z OpenCV i zlomky z Pythonu. Volbu na přepínači Zápis HSV nastav ještě před vložením, protože když už v poli nějaká barva je, přepínač ji přepíše na tutéž barvu v novém zápisu.

Zadej odstín ve stupních a sytost a jas v procentech. Hodnoty odděl čárkami nebo mezerami.

Zápis HSV

Stupně a procenta ukazují Photoshop a Figma. OpenCV ukládá odstín od 0 do 179 a sytost a jas od 0 do 255. Zlomky od 0 do 1 vrací colorsys v Pythonu a Unity.

na

Co znamenají tři čísla HSV?

První číslo je odstín (H), úhel na barevném kole: 0° je červená, 120° zelená a 240° modrá[1]. Druhé je sytost (S) a třetí jas (V). Photoshop tentýž model nazývá HSB a v dialogu pro výběr barvy zadáváš odstín ve stupních a sytost a jas v procentech[2]. Česká verze Photoshopu označuje pole odstínu, sytosti a jasu písmeny O, S a J[2]. Zápis O 217 S 76 J 96 pole HSV přečte stejně jako H 217 S 76 B 96, a to v jakémkoli pořadí písmen.


Sytost a jas nejlíp pochopíš přes malířské barvy. Alvy Ray Smith, který model popsal v roce 1978, je přirovnal k přidávání bílé a černé do čistého odstínu: nižší sytost znamená víc bílé a nižší jas víc černé[3]. Proto je každá barva s jasem 0 % černá, ať ostatní dvě čísla říkají cokoli, a se sytostí 0 % zbude šedá o daném jasu.

Karty barevných vzorků rozložené do kruhu na světlém stole
Karty barevných vzorků položené do kruhu, od žluté přes zelené a modré až k fialovým, růžovým a červeným. Odstín v HSV říká, na kterém místě takového kruhu barva leží, a úhel se počítá od červené. Foto: Andy Brown, Unsplash.

Pokud máš barvu v jiném zápisu, třeba v OKLCH, Lab nebo jako kód z Androidu, převodník barev ji ukáže najednou ve všech zápisech.

Jak převést HSV na RGB?

Nejdřív spočítej chromu, tedy rozpětí mezi kanály: C = V × S. Pak vyděl odstín 60°. Celá část výsledku určí jednu ze šesti výsečí kola a ze zbytku vyjde prostřední kanál: X = C × (1 − |(H ÷ 60°) mod 2 − 1|). Nakonec ke všem kanálům přičti m = V − C[1].


Vezměme hsv(217.2, 76%, 96.5%). Chroma je 0,965 × 0,76 = 0,733. Odstín vydělený 60° dá 3,62, takže barva leží ve výseči mezi 180° a 240°, kde je červená nulová, zelená prostřední a modrá plná. Prostřední kanál je 0,733 × (1 − |1,62 − 1|) = 0,279 a m = 0,965 − 0,733 = 0,232.


Po přičtení m mají kanály hodnoty 0,232, 0,511 a 0,965. Po vynásobení 255 a zaokrouhlení vyjde rgb(59, 130, 246) a převodník RGB na HEX z toho udělá šestnáctkový kód.

Jaké barvy RGB leží na barevném kole po 30°?

Tabulka ukazuje dvanáct odstínů s plnou sytostí a plným jasem, tedy čisté barvy na okraji kola. Hodnoty RGB a kódy HEX spočítal převodník.
Zápis HSVHodnoty RGBKód 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
Při plné sytosti a plném jasu má vždy jeden kanál 255 a jiný 0. Když jas snížíš na 50 %, nenulové kanály klesnou zhruba na polovinu: hsv(0, 100%, 50%) je rgb(128, 0, 0).

Dají celá čísla z Figmy přesně stejnou barvu?

Ne vždy. Figma zapisuje HSB celými čísly[4] a zaokrouhlený odstín, sytost nebo jas umí posunout kanál RGB o jednu jednotku. Tabulka porovnává výsledky převodníku pro tutéž barvu zapsanou přesně a zaokrouhleně.
Zápis HSVHodnoty RGBKód 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
Ověřili jsme všech 16 777 216 barev RGB: po zaokrouhlení HSV na celá čísla se jich přes 14,7 milionu vrátí jako jiná barva, s jedním desetinným místem se vrátí všechny beze změny. Proto převodník RGB na HSV dává výsledek s jedním desetinným místem.

Jak zapsat barvu HSV v CSS?

CSS nemá funkci hsv(), ale má hwb(), ve které za odstínem následuje množství bílé a černé přimíchané do barvy[5]. Model HWB popsal Alvy Ray Smith v roce 1996 a z HSV se získá dvěma krátkými vzorci: W = (1 − S) × V a B = 1 − V[6].


Pro hsv(217.2, 76%, 96.5%) vychází bílá (1 − 0,76) × 0,965 = 23,1 % a černá 1 − 0,965 = 3,5 %, takže do stylopisu napíšeš hwb(217.2 23.1% 3.5%). Prohlížeč ukáže stejnou barvu jako rgb(59, 130, 246). Pokud chceš zápis, kterému rozumí každý nástroj, vlož prostě výsledek tohoto převodníku.

Proč se trojice z OpenCV vrátí jako trochu jiná barva?

OpenCV ukládá odstín 8bitového obrázku jako polovinu úhlu, aby se vešel do jednoho bajtu[7]. Sousední hodnoty odstínu jsou tedy od sebe 2° a barva, která padne mezi ně, nemá přesný protějšek. Trojice 109, 194, 246, kterou OpenCV dá pro rgb(59, 130, 246), se s volbou OpenCV vrátí jako rgb(59, 127, 246), tedy se zelenou nižší o tři jednotky. Samo OpenCV vrací přesně totéž: volbu OpenCV jsme porovnali s OpenCV.js 4.10 na všech trojicích s odstínem od 0 do 180.


Když má výsledek jít zpátky do obrázku načteného přes cv2.imread, použij cv2.COLOR_HSV2BGR, protože takový obrázek drží kanály v pořadí modrá, zelená, červená[8].

Jaké zápisy HSV tento převodník přijme?

Každý z těchto zápisů pole přijme a převede, takže před vložením nemusíš nic opravovat. Tabulka ukazuje, co s každým z nich převodník udělá, a výsledky spočítal sám s volbou 0–360°, 0–100 %, pokud poznámka neříká jinak.
Co zadášCo převodník ukážeJak to čteme
hsv(217.2, 76%, 96.5%)rgb(59, 130, 246)Zápis se závorkou, stejný jako výsledek převodníku RGB na HSV, bereme beze změny.
hsb(217.2, 76%, 96.5%)rgb(59, 130, 246)Název HSB čteme jako HSV, protože jde o stejný model.
H 217,2 S 76 B 96,5rgb(59, 130, 246)Písmena H, S a B před čísly vynecháme a čárku mezi číslicemi čteme jako desetinnou.
217,2 76 % 96,5 %rgb(59, 130, 246)Mezeru před znakem procenta, jak se píše v češtině, přejdeme.
0,6034 0,7602 0,9647rgb(59, 130, 246)Tři zlomky nejvýš do 1 poznáme jako zápis z Pythonu a čteme je jako při volbě 0–1.
hsva(217.2, 76%, 96.5%, 0.5)rgba(59, 130, 246, 0.5)Čtvrté číslo bereme jako průhlednost a přeneseme ho do výsledku jako rgba.
[109 194 246]rgb(59, 127, 246)Pole NumPy vypsané Pythonem přečteme s volbou OpenCV i s hranatými závorkami.
-120, 100%, 100%rgb(0, 0, 255)Záporný odstín otočíme po kole stejně jako CSS, takže −120° je totéž co 240°.
hsv(217.2, 76%, 96.5%rgb(59, 130, 246)Chybějící uzavírací závorka je překlep, čísla proto přečteme i tak.

Převést jiné jednotky na RGB

Zdroje

  1. HSL and HSV — Wikipedie (anglicky)
  2. Výběr barev v aplikaci Adobe Photoshop — Adobe
  3. Color Gamut Transform Pairs (SIGGRAPH 78) — Alvy Ray Smith
  4. About color models — Figma Help Center
  5. CSS Color Module Level 4 — HWB Colors: hwb() function — W3C
  6. HWB — A More Intuitive Hue-Based Color Model — Alvy Ray Smith
  7. Color conversions: RGB ↔ HSV — OpenCV
  8. Image file reading and writing: imread — OpenCV
  9. colorsys — Conversions between color systems — Python Software Foundation

Všechny hodnoty v tabulkách jsme spočítali z definic jednotek a před zveřejněním ověřili výpočtem. Historické údaje a názvy místních jednotek vycházejí ze zdrojů uvedených výše.

Poslední revize obsahu: · napsal a zkontroloval tým Arteon

Časté otázky k převodu HSV na RGB

Proč převodník nepřijme sytost 194?

Při volbě 0–360°, 0–100 % sahají sytost a jas nejvýš do 100. Větší číslo bez znaku procenta obvykle pochází ze škály 0 až 255 z OpenCV, a tak ho převodník místo tichého oříznutí na 100 % ohlásí zprávou. Přepni pak Zápis HSV na OpenCV (0–179, 0–255).

Je v zápisu 0–1 zlomkem i odstín?

Ano. Modul colorsys v Pythonu dává všechna tři čísla od 0 do 1[9], takže odstín je zlomek celé otáčky. 0,6034 × 360° dá 217,2°.

Jak převedu HSV na kód HEX?

Převeď hodnotu tady a výsledek vlož do převodníku RGB na HEX. Barvu hned uvidíš ve čtvercovém vzorku vedle pole a kliknutím na něj otevřeš systémový výběr barvy.

Jak převedu RGB na HSV?

Zadej kanály do převodníku RGB na HSV. Tlačítko Prohodit pořadí tě tam přenese i s aktuálním výsledkem.

Snímek obrazovky bezplatného nástroje Arteon: Převeď hodnoty HSV na RGB

Pomoz nám vylepšit naše nástroje

Máš nápad na novou funkci, vidíš chybu nebo chceš navrhnout jiný nástroj? Napiš nám.