Converta valores HSV para RGB

Última revisão do conteúdo:

Escreva o matiz, a saturação e o valor, e os canais RGB aparecem enquanto escreve: hsv(217.2, 76%, 96.5%) corresponde a rgb(59, 130, 246). O campo aceita graus e percentagem do Photoshop ou do Figma, os três números que o OpenCV dá e frações do Python. Escolha a opção do seletor Notação HSV antes de colar, porque, se o campo já tiver uma cor, o seletor reescreve-a como a mesma cor na nova notação.

Introduza o matiz em graus e a saturação e o valor em percentagem. Separe os valores com vírgulas ou espaços.

Notação HSV

O Photoshop e o Figma mostram graus e percentagens. O OpenCV guarda o matiz de 0 a 179 e a saturação e o valor de 0 a 255. O colorsys do Python e o Unity devolvem frações de 0 a 1.

para

O que significam os três números HSV?

O primeiro número é o matiz (H), que vai de 0 a 360 e percorre todas as cores do espetro, do vermelho ao violeta, mais o magenta. O segundo é a saturação (S), a que também se chama pureza: quanto mais baixa, mais acinzentada fica a cor. O terceiro é o valor (V), que define o brilho[1]. No Photoshop o mesmo modelo chama-se HSB, e a ajuda da Adobe chama às suas componentes matiz, saturação e brilho[2].


A saturação e o valor percebem-se melhor a pensar em tinta. Alvy Ray Smith, que publicou o modelo em 1978, comparou-os a juntar branco e preto a um matiz puro: menos saturação é mais branco, e menos valor é mais preto[3]. Por isso qualquer cor com valor de 0% é preta, digam o que disserem os outros dois números, e com saturação de 0% fica um cinzento desse valor.

Cartões de amostras de cor dispostos em círculo sobre uma mesa clara
Cartões de amostras de cor dispostos em círculo, do amarelo aos verdes e azuis e daí aos violetas, rosas e vermelhos. O matiz do HSV diz em que ponto de uma roda assim fica uma cor, contando o ângulo a partir do vermelho. Foto: Andy Brown, Unsplash.

Se tiver a cor noutra notação, como OKLCH, Lab ou código de Android, o conversor de cores mostra-a de uma vez em todas as notações.

Como se converte HSV para RGB?

Calcule primeiro a croma, ou seja, a distância entre os canais: C = V × S. Depois divida o matiz por 60°. A parte inteira do resultado escolhe um dos seis setores da roda, e o resto dá o canal intermédio: X = C × (1 − |(H ÷ 60°) mod 2 − 1|). Por fim, some m = V − C a todos os canais[4].


Tomemos hsv(217.2, 76%, 96.5%). A croma é 0,965 × 0,76 = 0,733. O matiz dividido por 60° dá 3,62, portanto a cor está no setor entre 180° e 240°, onde o vermelho é zero, o verde é o canal intermédio e o azul está cheio. O canal intermédio vale 0,733 × (1 − |1,62 − 1|) = 0,279, e m = 0,965 − 0,733 = 0,232.


Depois de somar m, os canais valem 0,232, 0,511 e 0,965. Multiplicados por 255 e arredondados dão rgb(59, 130, 246), que o conversor de RGB para HEX passa a código hexadecimal.

Que cores RGB há na roda das cores de 30 em 30°?

São doze matizes com saturação e valor máximos, ou seja, as cores puras da borda da roda. O conversor calculou os valores RGB e os códigos HEX.
Notação HSVValores RGBCódigo 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
Com saturação e valor máximos, um canal vale sempre 255 e outro 0. Se baixar o valor para 50%, os canais que não são zero reduzem-se mais ou menos a metade: hsv(0, 100%, 50%) é rgb(128, 0, 0).

Os números inteiros do Figma dão exatamente a mesma cor?

Nem sempre. O Figma escreve o HSB com números inteiros[5], e um matiz, uma saturação ou um valor arredondados podem deslocar um canal RGB uma unidade. A tabela compara os resultados do conversor para a mesma cor escrita com exatidão e arredondada.
Notação HSVValores RGBCódigo 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
Verificámos as 16 777 216 cores RGB: com o HSV arredondado às unidades, mais de 14,7 milhões delas voltam como outra cor, e com uma casa decimal voltam todas iguais. É por isso que o conversor de RGB para HSV dá o resultado com uma casa decimal.

Como se escreve uma cor HSV em CSS?

O CSS não tem a função hsv(), mas tem hwb(), em que o matiz é seguido da quantidade de branco e de preto misturada na cor[6]. O modelo HWB foi descrito por Alvy Ray Smith em 1996 e obtém-se do HSV com duas fórmulas curtas: W = (1 − S) × V e B = 1 − V[7].


Para hsv(217.2, 76%, 96.5%), o branco é (1 − 0,76) × 0,965 = 23,1% e o preto 1 − 0,965 = 3,5%, por isso na folha de estilos escreve hwb(217.2 23.1% 3.5%). O navegador mostra a mesma cor que rgb(59, 130, 246). Se preferir uma notação que qualquer ferramenta entenda, cole simplesmente o resultado deste conversor.

Porque é que um trio do OpenCV volta como uma cor um pouco diferente?

O OpenCV guarda o matiz de uma imagem de 8 bits como metade do ângulo, para caber num byte[8]. Valores de matiz vizinhos ficam assim a 2° de distância, e uma cor que caia entre eles não tem equivalente exato. O trio 109, 194, 246 que o OpenCV dá para rgb(59, 130, 246) volta com a opção OpenCV como rgb(59, 127, 246), com o verde três unidades abaixo. O próprio OpenCV devolve exatamente o mesmo: comparámos a opção OpenCV com o OpenCV.js 4.10 em todos os trios com matiz de 0 a 180.


Se o resultado voltar a uma imagem carregada com cv2.imread, use cv2.COLOR_HSV2BGR, porque essa imagem guarda os canais pela ordem azul, verde, vermelho[9].

Que formatos HSV aceita este conversor?

O campo aceita e converte cada um destes formatos, por isso não precisa de corrigir nada antes de colar. A tabela mostra o que o conversor faz com cada um, e os resultados foram calculados por ele próprio com a opção 0–360°, 0–100%, salvo indicação em contrário na nota.
O que escreveO que o conversor mostraComo o lemos
hsv(217.2, 76%, 96.5%)rgb(59, 130, 246)Aceitamos tal como está a notação com parênteses, a mesma que o conversor de RGB para HSV dá.
hsb(217.2, 76%, 96.5%)rgb(59, 130, 246)Tratamos o nome HSB como HSV, porque é o mesmo modelo.
H 217,2 S 76 B 96,5rgb(59, 130, 246)Retiramos as letras das caixas do Seletor de Cores do Photoshop e lemos a vírgula entre algarismos como decimal.
217,2º 76% 96,5%rgb(59, 130, 246)Lemos como grau o ordinal º, que no teclado português está mais à mão do que o sinal de grau.
0,6034 0,7602 0,9647rgb(59, 130, 246)Reconhecemos três frações não maiores do que 1 como notação do Python e lemo-las como com a opção 0–1.
hsva(217.2, 76%, 96.5%, 0.5)rgba(59, 130, 246, 0.5)Tomamos o quarto número como opacidade e passamo-lo para o resultado em rgba.
[109 194 246]rgb(59, 127, 246)Lemos com a opção OpenCV um array do NumPy impresso pelo Python, com os parênteses retos.
-120, 100%, 100%rgb(0, 0, 255)Rodamos um matiz negativo na roda como faz o CSS, por isso −120° é o mesmo que 240°.
hsv(217.2, 76%, 96.5%rgb(59, 130, 246)A falta do parêntese de fecho é uma gralha, por isso lemos os números na mesma.

Converter outras unidades para RGB

Fontes

  1. HSV — Wikipédia
  2. Escolher cores no Adobe Photoshop — Adobe
  3. Color Gamut Transform Pairs (SIGGRAPH 78) — Alvy Ray Smith
  4. HSL and HSV — HSV to RGB — Wikipedia (em inglês)
  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

Todos os valores das tabelas foram calculados a partir das definições das unidades e verificados aritmeticamente antes da publicação. Os dados históricos e os nomes das unidades locais assentam nas fontes indicadas acima.

Última revisão do conteúdo: · escrito e verificado pela equipa Arteon

Perguntas frequentes sobre converter HSV para RGB

Porque é que o conversor não aceita uma saturação de 194?

Com a opção 0–360°, 0–100%, a saturação e o valor vão no máximo até 100. Um número maior sem sinal de percentagem vem normalmente da escala de 0 a 255 do OpenCV, por isso, em vez de o cortar em silêncio para 100%, o conversor mostra um aviso. Mude então a Notação HSV para OpenCV (0–179, 0–255).

Na notação 0–1, o matiz também é uma fração?

Sim. O módulo colorsys do Python dá os três números de 0 a 1[10], por isso o matiz é uma fração da volta completa. 0,6034 × 360° dá 217,2°.

Como passo de HSV para código HEX?

Converta aqui o valor e cole o resultado no conversor de RGB para HEX. A cor aparece logo na amostra quadrada ao lado do campo, e um clique nela abre o seletor de cor do sistema.

Como passo de RGB para HSV?

Introduza os canais no conversor de RGB para HSV. O botão Trocar ordem leva-o até lá com o resultado atual.

Captura de ecrã da ferramenta gratuita da Arteon: Converta valores HSV para RGB

Ajude-nos a melhorar as nossas ferramentas

Tem uma ideia para uma nova função, encontrou um erro ou quer sugerir outra ferramenta? Escreva-nos.