대표적으로 흔히 들어본 색공간인 RGB, HSV, HSL에 대해 알아보자.
색공간(Color Space)이란?
- 색 표시계(color system)의 모든 색들을 3차원 좌표계로 표현한 공간이다.
- RGB, HSV, HSL처럼 색공간을 표현하는 방법들(=색공간의 종류)을 color model이라고 표현한다.
RGB
- Red, Green, Blue 3채널로 표현되는 색공간
- 각 채널마다 0~255로 표현되고, (0,0,0)은 검정색, (255,255,255)는 흰색이다.
- 빨강(255, 0, 0), 초록(0, 255, 0), 파랑(0,0,255)이고,
- OpenCV에서는 반대의 순차로 BGR의 형식을 사용한다.
HSV (HSB)
- OpenCV | Color conversions (BRG → HSV)
Hue : 색상
- 빨강, 노랑, 파랑 등으로 시각적 감각의 속성 사람이 인식하는 색상
- 0° ~ 360° 까지 표현된다. Hue - Wikipedia
- OpenCV에서는 0~179까지 사용한다.
(360까지의 범위는 1Byte=uint8의 범위를 벗어나기 때문에 절반으로 표준화하여 사용)
Saturation : 채도
- 이미지의 색상 깊이로 얼마나 순수한, 선명한 색인지를 나타내는 것.
- 원색에 가까울수록 채도가 높아진다.
- 0~100%의 비율로 표현되며, 0에 가까울수록 무채색, 100에 가까울수록 선명한 색이다.
- OpenCV에서는 0에서 255까지 범위로 표현한다.
Value : 명도 (=Brightness : 밝기)
- 색이 밝고, 어두운 정도
- 명도가 높을수록 색상이 밝아지며, 낮을수록 색상이 어두워진다.
- 0~100% 비율을 가지고, 0에 가까울수록 검정색, 100에 가까울수록 가장 맑은 색이 된다.
- OpenCV에서는 0에서 255범위로 표현된다.
HSL
- OpenCV | Color Conversions (RGB → HLS)
- Hue, Saturation은 HSV(HSB)와 같다.
Lightness : 명도
- HSV의 Value와 같이 0~100%의 명도를 가진다.
- HSV(HSB)와의 차이점은 아래의 b,f의 그림으로 설명해보겠다.
b. HL의 스펙트럼에서는 1) RGB색상을 기준으로 정규분포모양처럼 색상이 퍼져있고, 2) Lightness가 1이면 무조건 흰색이 나온다.
f. HV의 스펙트럼에서는 1) RGB색상을 기준으로 좀 더 넓은 범위로 색상이 퍼져있고, 2) Value가 1이어도 Saturation 값에 따라서 흰색일수도 있고, 그냥 가장 밝은 색이 나올 수도 있다. (Saturation도 0이어야 흰색이 나온다.)
이런 분포의 차이를 따라서, 전체적으로는 a와 e 그래프처럼 표현될 수 있고, L, V가 중앙값일때의 색상 그래프로 c, g 그림을 보면 색상 분포의 차이를 확실히 느낄 수 있다.
'Programming > python-computer vision' 카테고리의 다른 글
[python] OpenCV 이미지 시각화 코드 모음 (cv2.imshow) - vscode, jupyter, colab (0) | 2023.12.24 |
---|---|
Matplotlib Colormaps로 OpenCV Contours 그리는 법 (0) | 2023.07.19 |
기울어진 BBOX 이미지를 잘라내는 법, 수평으로 회전시키는 방법! (EasyOCR, OpenCV) (0) | 2023.02.17 |
바운딩 박스 텍스트 읽는 순서대로 정렬하는 법 | How to sort the shuffled bounding boxes in a same way to read text (0) | 2023.02.06 |
(OpenCV, Matplotlib) 파이썬에서 이미지 시각화하는 방법, 띄우는 방법 (0) | 2023.01.02 |