3장. 디지털 영상과 색공간 변환
색공간 고르는 기준
등산할 때는 등고선이 있는 등산 지도를, 운전할 때는 내비게이션을, 지하철을 탈 때는 노선도를 봅니다. 같은 땅인데 하려는 일에 따라 편한 지도가 다릅니다. 색공간도 "무엇을 하려는가"로 고릅니다.
네 상자는 하려는 일과 그에 맞는 색공간입니다. 어느 상자로 가든 출발점은 OpenCV 가 읽은 BGR 그림이고, cv2.cvtColor 한 번이면 바꿀 수 있습니다. 여기서 지도의 종류가 색공간이고, 등산·운전 같은 목적이 영상처리의 할 일입니다.
할 일에 맞는 색공간
| 하려는 일 | 고를 색공간 | 까닭 | 이 과정에서 |
|---|---|---|---|
| 테두리 찾기, 글자 읽기, 밝기 분석 | Gray | 색이 필요 없고 숫자가 1/3 로 줄어 빠르다 | 8장, 11장 |
| 특정 색 물건 고르기 | HSV | 색이 H 하나로 정해지고 그늘에 덜 흔들린다 | 이 장, 13장 |
| 화면에 보여 주기, 다른 라이브러리에 넘기기 | RGB | Matplotlib 과 대부분의 라이브러리가 RGB 를 쓴다 | 모든 장 |
| 두 색이 얼마나 다른지 재기 | Lab | 숫자 차이가 사람 눈의 차이에 가깝다 | 색 품질 검사 |
| 밝기만 다듬고 색은 그대로 두기 | YCrCb, Lab | 밝기 채널만 고치고 되돌린다 | 5장 |
| 파일로 저장하기 | BGR | cv2.imwrite 가 BGR 을 기대한다 | 모든 장 |
# 하려는 일 → 색공간을 사전으로 적어 두고 찾아 쓴다
choose = {
"테두리 찾기": "GRAY",
"빨간 사과 고르기": "HSV",
"화면에 띄우기": "RGB",
"색 차이 재기": "Lab",
}
for job, space in choose.items():
print(f"{job:10} → cv2.COLOR_BGR2{space}")주의할 점
- 색공간을 바꾼 그림을 Matplotlib 에 그대로 넣으면 이상한 색으로 보입니다. HSV 그림의 세 숫자를 R, G, B 로 읽기 때문입니다. 볼 때는 채널 하나씩 흑백으로 보거나 BGR 로 되돌린 뒤 RGB 로 바꿉니다.
- 바꿀 때마다 반올림이 생기므로 BGR → HSV → BGR 로 돌아오면 몇몇 칸이 1~2 다를 수 있습니다. 원본은 따로 두고 필요할 때 다시 바꿉니다.