OpenCV 비전 실무4장 · 채널 처리와 히스토그램 분석6 / 21← 이전목차다음 →MetaContents

4장. 채널 처리와 히스토그램 분석

채널 바꿔치기와 색 정보 분석

옷장 서랍에 붙은 이름표를 바꿔 달면, 양말 서랍에서 셔츠가 나옵니다. 채널도 cv2.merge 에 넣는 순서를 바꾸면 빨강 자리에 파랑 숫자가 들어가 색이 바뀝니다. 그리고 서랍마다 옷이 몇 벌 들었는지 세어 보면 그 집 사람이 어떤 옷을 많이 입는지 알 수 있듯, 채널마다 평균을 내면 사진이 어느 색으로 쏠렸는지 알 수 있습니다.

merge 의 순서 바꾸기, cv2.mean 으로 채널 평균 구하기, 색 경향 판정을 나란히 놓은 비교 그림

그림의 세 상자는 이 절에서 하는 세 가지 일입니다. 첫째 상자가 이름표 바꿔 달기, 둘째와 셋째 상자가 서랍 속 옷 세기에 해당합니다. 여기서 서랍이 채널이고, 옷의 양이 채널 평균입니다.

채널 평균으로 읽는 색 경향

채널 평균의 모습읽는 법흔한 장면
R 이 B 보다 뚜렷이 크다따뜻한 쪽(붉은빛, 누런빛)노을, 백열등 아래의 실내
B 가 R 보다 뚜렷이 크다차가운 쪽(푸른빛)하늘, 물, 그늘
G 가 가장 크다초록이 많다숲, 풀밭
세 값이 비슷하다쏠림이 적다회색 건물, 흐린 날

"뚜렷이"의 기준은 쓰는 사람이 정합니다. 이 장의 실습은 R 과 B 의 차이가 30 을 넘으면 쏠렸다고 봅니다. 3장에서 본 HSV 의 색상(H)으로도 색을 읽을 수 있지만, 이 장은 B·G·R 평균만으로 간단히 읽습니다.

짧은 예시

Python
import cv2
import numpy as np

img = cv2.imread("ch04_scenes/sunset.png")
b, g, r = cv2.split(img)

# 넣는 순서를 [r, g, b] 로 바꾸면 빨강 숫자가 파랑 자리로 간다
swapped = cv2.merge([r, g, b])
print(img[140, 200], "→", swapped[140, 200])   # 결과: [120 220 255] → [255 220 120]

# cv2.mean: 채널마다의 평균을 네 칸짜리 튜플로 돌려준다(넷째 칸은 투명도 자리라 0)
means = cv2.mean(img)
print([round(v, 1) for v in means[:3]])        # 결과: B, G, R 평균 세 개

# NumPy 로도 같다: 세로·가로 방향(axis 0, 1)으로 평균을 내고 채널만 남긴다
print([round(float(v), 1) for v in img.mean(axis=(0, 1))])

노을 그림의 평균은 B 61.1, G 86.6, R 185.5 입니다. R 이 B 보다 120 넘게 크니 따뜻한 쪽으로 크게 쏠린 사진입니다. axis 는 "축"이라는 뜻으로, 평균을 낼 방향을 고릅니다.

주의할 점

  • cv2.mean 은 채널이 셋이어도 네 칸짜리 값을 돌려줍니다. 앞의 세 칸만 씁니다.
  • 평균은 사진 전체를 한 숫자로 뭉뚱그립니다. 붉은 해 하나가 작게 있어도 평균은 거의 바뀌지 않습니다. 일부만 보고 싶으면 뒤에서 볼 마스크를 씁니다.
← 이전 절4장 · 채널 하나만 보기다음 절 →4장 · 히스토그램이란