파이썬의 colorsys 모듈은 RGB(Red Green Blue)로 표현된 색상 값을 다른 색상 공간으로 상호 변환할 수 있게 해주는 표준 라이브러리입니다. 이 모듈에서 지원하는 세 가지 색상 공간은 다음과 같습니다.
- YIQ — 휘도(Luminance, Y)와 위상(In-phase) 및 직교위상(Quadrature) 성분으로 구성된 색상 공간
- HLS — 색상(Hue), 명도(Lightness), 채도(Saturation) 기반의 색상 공간
- HSV — 색상(Hue), 채도(Saturation), 명도(Value) 기반의 색상 공간
YIQ 색상 공간의 I와 Q 값을 제외한 모든 좌표 값은 0부터 1 사이의 범위를 가집니다.
colorsys 모듈의 주요 함수
아래 표는 colorsys 모듈에서 제공하는 함수와 각각의 용도를 정리한 것입니다.
| 함수 | 용도 | 허용 범위 |
|---|---|---|
| rgb_to_yiq | RGB 좌표를 YIQ 좌표로 변환 | 0 ~ 1 |
| rgb_to_hls | RGB 좌표를 HLS 좌표로 변환 | 0 ~ 1 |
| rgb_to_hsv | RGB 좌표를 HSV 좌표로 변환 | 0 ~ 1 |
| yiq_to_rgb | YIQ 좌표를 RGB 좌표로 변환 | -1 ~ 1 |
| hls_to_rgb | HLS 좌표를 RGB 좌표로 변환 | 0 ~ 1 |
| hsv_to_rgb | HSV 좌표를 RGB 좌표로 변환 | 0 ~ 1 |
사용 예제
다음 예제는 '일렉트릭 블루(Electric Blue)' 색상의 RGB 값을 기준으로 YIQ, HSV, HLS 좌표로 변환한 뒤, 다시 원래의 RGB 값으로 되돌리는 과정을 보여줍니다.
import colorsys as csys
# "Electric Blue" 색상 정의
r, g, b = 0.47, 0.91, 1.00
print("Electric Blue의 RGB 값:", (r, g, b))
# RGB → YIQ → RGB 변환
y, i, q = csys.rgb_to_yiq(r, g, b)
print("YIQ", (y, i, q), "→", csys.yiq_to_rgb(y, i, q))
# RGB → HSV → RGB 변환
h, s, v = csys.rgb_to_hsv(r, g, b)
print("HSV", (h, s, v), "→", csys.hsv_to_rgb(h, s, v))
# RGB → HLS → RGB 변환
h, l, s = csys.rgb_to_hls(r, g, b)
print("HLS", (h, l, s), "→", csys.hls_to_rgb(h, l, s))실행 결과
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
Electric Blue의 RGB 값: (0.47, 0.91, 1.0) YIQ (0.7879, -0.292513, -0.06563100000000005) → (0.47, 0.9100000000000001, 1.0) HSV (0.5283018867924528, 0.53, 1.0) → (0.47, 0.9099999999999999, 1.0) HLS (0.5283018867924528, 0.735, 1.0) → (0.4700000000000001, 0.9099999999999998, 0.9999999999999999)
출력 결과를 보면 변환 후 다시 원래 값으로 되돌릴 때 소수점 아래 미세한 오차(부동소수점 연산 특성)가 발생하지만, 실질적으로 동일한 색상 값임을 확인할 수 있습니다. 이러한 오차는 부동소수점 연산에서 자연스럽게 나타나는 현상입니다.