4장. 채널 처리와 히스토그램 분석
채널 하나만 보기
셀로판지 한 장만 따로 들고 보는 방법은 두 가지입니다. 흰 종이 위에 놓고 무늬의 진하기만 보거나, 빛에 비춰 원래 색으로 봅니다. 채널 하나도 두 가지로 띄울 수 있습니다. 흑백 그림으로 띄우거나, 나머지 두 채널을 0 으로 채워 그 색으로 띄웁니다.
왼쪽 상자는 채널 한 장을 그대로 흑백으로 띄우는 방법이고, 오른쪽 상자는 나머지 두 채널을 0 으로 채워 그 색으로 띄우는 방법입니다. 여기서 흰 종이 위에 놓고 보는 것이 흑백 보기, 빛에 비춰 보는 것이 그 색으로 보기입니다.
가운데와 오른쪽은 같은 R 채널입니다. 가운데는 밝을수록 빨강이 많다는 뜻이고, 오른쪽은 같은 숫자를 빨간 빛의 세기로 보여 줍니다. 담긴 숫자는 똑같고 보여 주는 방법만 다릅니다.
두 가지 보기 견주기
| 견줄 것 | 흑백으로 보기 | 그 색으로 보기 |
|---|---|---|
| 만드는 법 | 채널 한 장을 cmap="gray" 로 | 다른 두 채널을 0 으로 채워 cv2.merge |
| 배열 모양 | (세로, 가로) | (세로, 가로, 3) |
| 좋은 점 | 밝기 차이를 또렷하게 읽는다 | 어느 색 채널인지 한눈에 안다 |
| 쓰는 곳 | 채널끼리 견주기, 분석 | 수업 자료, 설명용 그림 |
짧은 예시
import cv2
import numpy as np
img = cv2.imread("ch04_scenes/sunset.png")
b, g, r = cv2.split(img)
# np.zeros_like: 주어진 배열과 모양·자료형이 같고 모든 값이 0 인 배열
zero = np.zeros_like(r)
# 파랑, 초록 자리에 0 을 넣고 빨강 자리에만 R 채널을 넣는다 → 빨강으로만 보인다
red_only = cv2.merge([zero, zero, r])
print(red_only.shape) # 결과: (240, 320, 3)
print(red_only[140, 200]) # 결과: [ 0 0 255] → 해 한가운데의 빨강만 남았다np.zeros_like 의 like 는 "~처럼"이라는 뜻입니다. "r 처럼 생긴 0 배열"을 만듭니다.
주의할 점
- 채널 한 장을
cmap="gray"없이 띄우면 Matplotlib 이 가짜 색을 입힙니다(1장). - "그 색으로 보기" 그림을 Matplotlib 으로 띄울 때도
cv2.COLOR_BGR2RGB로 바꿔야 빨강이 빨갛게 보입니다.