[OpenCV] Channel의 분리와 조합

OpenCV에서 이미지에 대한 채널, 즉 일반적으로 Red, Green, Blue로 분리된 데이터 버퍼를 개별 요소로 분리하고, 이렇게 분리된 Channel들을 다시 하나의 이미지로써 묶는 경우 대한 기초적인 API에 대한 정리입니다.

정리를 위한 코드가 매우 짧은데, 아래와 같습니다.

import cv2
import numpy as np

src = cv2.imread('./data/lena.jpg')
cv2.imshow('src', src)

hsv = cv2.cvtColor(src, cv2.COLOR_BGR2HSV)
h, s, v = cv2.split(hsv)

v2 = cv2.equalizeHist(v)
hsv2 = cv2.merge([h, s, v2])
dst = cv2.cvtColor(hsv2, cv2.COLOR_HSV2BGR)
cv2.imshow('dst', dst)

cv2.waitKey()
cv2.destroyAllWindows()

코드 4번에서 이미지 데이터를 읽어와 src에 저장하고, 7번에서 RGB 채널(OpenCV는 BGR 순서임)을 HSV 채널로 변환하여 hsv 버퍼에 저장합니다. 이 hsv 버퍼에 저장된 3개의 채널을 각각 h, s, v 버퍼에 저장 분리하는 코드가 8번인 cv2.split 입니다. 분리된 채널 중 v에 대해 Histogram 균등화를 수행하기 위해 10번이 실행되었고, 균등화된 v는 v2 버퍼에 저장됩니다. 다시 h, s, v2 버퍼에 저장된 3개의 Channel을 조합하기 위해 11번 코드의 cv2.merge API가 사용됩니다.