10.1.3 색상 채널 나누기
imread() 함수로부터 생성된 컬러 영상은 하나의 픽셀이 파란색(B), 녹색(G), 빨간색(R) 세 개의 색상 정보를 가지고 있습니다. 그래서 OpenCV에서 컬러 영상은 보통 uchar 자료형을 사용하고 세 개의 채널을 갖는 Mat 객체로 표현합니다. 그런데 컬러 영상을 다루다 보면 빨간색 성분만을 이용하거나 HSV 색 공간으로 변환한 후 H 성분만을 이용하는 경우가 종종 발생합니다. 이러한 경우에는 3채널 Mat 객체를 1채널 Mat 객체 세 개로 분리해서 다루는 것이 효율적입니다.
OpenCV에서 다채널 행렬을 1채널 행렬 여러 개로 변환할 때에는 split() 함수를 사용합니다. split() 함수 원형은 다음과 같습니다.
void split(const Mat& src, Mat* mvbegin); void split(InputArray src, OutputArrayOfArrays mv); |
|
• src |
입력 다채널 행렬 |
• mvbegin |
분리된 1채널 행렬을 저장할 Mat 배열 주소. 영상 배열 개수는 src 영상 채널 수와 같아야 합니다. |
• mv |
분리된 1채널 행렬을 저장할 벡터 |
split() 함수의 입력 src는 여러 개의 채널로 구성된 다채널 행렬입니다. 그리고 1채널 행렬로 분할된 결과는 Mat 자료형의 배열 또는 vector<Mat> 형식의 변수로 받을 수 있습니다. Mat 자료형 배열을 사용할 경우에는 배열의 크기가 입력 영상의 채널 수보다 같거나 커야 합니다.