2013-03-15 2 views
6

저는 RGB 색상 값을 HLS로 변환하기 위해 python의 colorsys 라이브러리를 사용하고 있습니다. 확인하려면 RGB로 다시 변환하고 다른 값을 다시 얻으려고했습니다. 정밀도 문제로 인해 사소한 차이점을 이해할 수 있지만이 값은 크게 다릅니다. 여기 RGB를 HLS로 변환하고 뒤로

내 코드입니다 :

import colorsys 
r=192 
g=64 
b=1 

hlsval = colorsys.rgb_to_hls(r,g,b) 
rgbval=colorsys.hls_to_rgb(hlsval[0],hlsval[1],hlsval[2]) 

print hlsval, rgbval 

출력 :

(0.16666666666666666, 96.5, -1.0) (191.99999999999994, 192.0, 1.0) 

녹색 값은 200 나는 약간 다른 값을 시도

%, 모든 시간으로 꺼져 구성 요소 중 하나 상당한 금액만큼 떨어져있다. 내가 놓친 게 있니?

+1

값을 ? –

+2

@AshwiniChaudhary : 어딘가에 'a, b, c = r, g, b'와 동등한 것을 가졌습니다. (또는 그는 단지'r, g, b' 대신에'r, g, b' 대신에 코드를 편집하는 것을 잊었습니다. 'a, b, c' 또는 뭔가), 왜냐하면 그것들은 정확히'a, b, c = 192, 64, 1'로 얻는 값이기 때문입니다. – abarnert

+0

그래, 미안해. 나는 지금 그것을 바로 잡았다. – user2175594

답변

15

값은 색상 공간 범위 밖에 있습니다. the docs에서

:

좌표를이 색 공간의 모두는 부동 소수점 값 있습니다. YIQ 공간에서 Y 좌표는 0과 1 사이이지만 I 및 Q 좌표는 양수 또는 음수가 될 수 있습니다. 다른 모든 공간에서는 좌표가 모두 0에서 1 사이입니다.

0에서 255 사이의 바이트 값이 필요하다고 생각하십니까? 그냥 처음 255에 의해 분할 :

r, g, b = 192, 64, 1 
r, g, b = [x/255.0 for x in r, g, b] 
h, l, s = colorsys.rgb_to_hls(r, g, b) 
r, g, b = colorsys.hls_to_rgb(h, l, s) 
r, g, b = [x*255.0 for x in r, g, b] 
print r, g, b 

이 당신에게 줄 것이다 :

192.0 64.0 1.0 

을 당신은 당신이 그런 말도 안되는 오류가 발생할 왜이 색 공간의 범위를 벗어난 길을 갈 때 이해합니다.

우선, 문서에서 링크 된 두 문서를 읽고 색상 공간 외부의 값이 의미가없는 이유와 불가능한 제약 조건에 값을 생성하도록 요청하는 이유를 이해하십시오. 그렇다면 그것이 다른 방식 대신에 실패하는 이유를 정확하게 알아 내려면 어떤 알고리즘을 사용하고 있는지 알고 있어야합니다. 문서가 소스 코드에 링크되어 있기 때문에 매우 쉽습니다. 순수한 파이썬이고 읽기 쉽습니다. .

(PS, 나는 9천6백50%의 밝기가 어떻게 보이는지 상상할 수있는,하지만 난 -100 % 포화에 대해 궁금 해요. 아마 Lovecraftian에서 뭔가를.) A`,`b`와`c``의