RGB 이미지는 빨강(Red), 초록(Green), 파랑(Blue)의 세 가지 채널로 구성되어 있습니다. 이처럼 빨강, 초록, 파랑 채널이 이미지를 표현하는 색 공간을 RGB 색 공간이라고 부릅니다. 다만 OpenCV에서는 RGB 순서 대신 BGR 순서를 사용합니다. 즉, 첫 번째 채널은 파랑, 두 번째 채널은 초록, 세 번째 채널은 빨강을 의미합니다.
1. 세 개의 채널을 담을 행렬 선언하기
RGB 이미지를 각 채널로 분리하려면 먼저 3개의 채널을 저장할 수 있는 행렬 배열을 정의해야 합니다. 이때 다음과 같이 선언합니다.
Mat different_Channels[3]; // 3개 채널을 저장할 행렬 배열 선언 //
2. split() 함수로 이미지 분리하기
다음으로, OpenCV에서 제공하는 split() 함수를 사용하여 불러온 이미지를 채널별로 분리합니다. 이 함수의 기본 형식은 다음과 같습니다.
split(원본 행렬, 대상 행렬);
split() 함수는 원본 행렬에 저장된 이미지를 채널 단위로 나누어 대상 행렬에 순서대로 저장합니다. 실제 코드에서는 아래 한 줄로 처리됩니다.
split(myImage, different_Channels); // 이미지를 3개 채널로 분리 //
이 시점에서 split() 함수는 파랑, 초록, 빨강 채널을 이미 different_Channels 배열에 저장한 상태입니다. 이제 각 채널의 이미지를 새로운 행렬 변수에 옮겨 담습니다.
Mat b = different_Channels[0]; // 파랑 채널 불러오기 // Mat g = different_Channels[1]; // 초록 채널 불러오기 // Mat r = different_Channels[2]; // 빨강 채널 불러오기 //
3. 각 채널 화면에 출력하기
마지막으로 imshow() 함수를 사용하여 분리된 각 채널을 별도의 창에 띄워 확인할 수 있습니다.
imshow("Blue Channel", b); // 파랑 채널 출력 //
imshow("Green Channel", g); // 초록 채널 출력 //
imshow("Red Channel", r); // 빨강 채널 출력 //
이 과정을 통해 하나의 이미지를 구성하는 채널들을 손쉽게 분리할 수 있습니다.
전체 예제 코드
아래 프로그램은 RGB 이미지를 파랑, 초록, 빨강 채널로 분리하여 각각 화면에 출력하는 전체 예제입니다.
#include<iostream>
#include<opencv2/highgui/highgui.hpp>
#include<opencv2/imgproc/imgproc.hpp>
using namespace cv;
using namespace std;
int main(int argc,const char** argv) {
Mat myImage; // 이미지를 불러올 행렬 선언 //
Mat different_Channels[3]; // 3개 채널을 저장할 행렬 배열 선언 //
myImage = imread("RGB.png"); // myImage 행렬에 이미지 불러오기 //
split(myImage, different_Channels); // 이미지를 3개 채널로 분리 //
Mat b = different_Channels[0]; // 파랑 채널 불러오기 //
Mat g = different_Channels[1]; // 초록 채널 불러오기 //
Mat r = different_Channels[2]; // 빨강 채널 불러오기 //
imshow("Blue Channel", b); // 파랑 채널 출력 //
imshow("Green Channel", g); // 초록 채널 출력 //
imshow("Red Channel", r); // 빨강 채널 출력 //
imshow("Actual_Image", myImage); // 원본 이미지 출력 //
waitKey(0); // 키 입력 대기
destroyAllWindows(); // 모든 창 닫기 //
return 0;
}
실행 결과

실행 결과를 보면 원본 이미지가 파랑, 초록, 빨강 채널로 각각 분리되어 출력된 것을 확인할 수 있습니다. 각 채널 이미지는 해당 색 성분의 강도를 명암(그레이스케일) 형태로 보여주며, 값이 밝을수록 그 색 성분이 많이 포함되어 있다는 의미입니다.