[파이썬 OpenCV] 컬러 영상과 색 공간 - 색상 분리(cv2.split), 색상 결합(cv2.merge), 색 변환(cv2.cvtColor)
AI 꿈나무2020. 9. 27. 18:13
반응형
황선규 박사님의 OpenCV 강의를 공부하면서 정리하였습니다.
컬러 영상과 색 공간
컬러 영상은 3차원 np.ndarray로 표현합니다.
img.shape = (h, w, 3)입니다.
OpenCV에서는 RGB 순서가 아니라 BGR 순서를 기본으로 사용합니다.
RGB 색 공간은 빛의 삼원색인 빨간색(R), 녹색(G), 파란색(B)를 혼합하여 색상을 표현합니다. (가산 혼합)
1. (색상) 채널 분리 - cv2.split
cv2.split 함수를 이용해서 RGB 색상 평면을 나눌 수 있습니다.
[함수 설명]
cv2.split(m, mv=None) -> dst
• m: 다채널 영상 (e.g.) (B, G, R)로 구성된 컬러 영상 • mv: 출력 영상 • dst: 출력 영상의 리스트
[예시 코드]
# 컬러 영상 불러오기
src = cv2.imread('candies.png', cv2.IMREAD_COLOR)
# 불러왔는지 확인
if src is None:
print('Image load failed!')
sys.exit()
# 컬러 영상 속성 확인
print('scr.shape:', scr.shape) # src.shape: (480, 640, 3)
print('src.dtype:', src.dtype) # src.dtype: unit8
# RGB 색 평면 분할
b_plane, g_plane, r_plane = cv2.split(src)
# 슬라이싱 이용하여 RGB 색 평면 분할
b_plane = src[:, :, 0]
g_plane = src[:, :, 1]
r_plane = src[:, :, 2]
cv2.imshow('src', src)
cv2.imshow('B_plane', b_plane)
cv2.imshow('G_plane', g_plane)
cv2.imshow('R_plane', r_plane)
cv2.waitKey()
2. (색상) 채널 결합 - cv2.merge
cv2.merge 함수로 색상 채널을 결합할 수 있습니다.
[함수 설명]
cv2.merge(mv, dst=None) -> dst
• mv: 입력 영상 리스트 또는 튜플 • dst: 출력 영상
[예시 코드]
# 컬러 영상 불러오기
src = cv2.imread('candies.png', cv2.IMREAD_COLOR)
# RGB 색 평면 분할
b_plane, g_plane, r_plane = cv2.split(src)
# 색상 채널 결합
src_merge = cv2.merge((b_plane, g_plane, r_plane))
# 영상 출력
cv2.imshow('src', src)
cv2.imshow('merge', src_merge)
cv2.waitKey()
cv2.destroyAllWindows()
src 영상의 색상과 merge 영상의 색상이 같습니다.
3. 색 공간 변환 함수 - cv2.cvtColor
영상 처리에서는 특정한 목적을 위해 RGB 색 공간을 HSV, YCrCb, Grayscale 등의 다른 색 공간으로 변환하여 처리할 수 있습니다.