-
Split/Merge컴공지식/컴퓨터비전 2024. 9. 20. 00:49
Split/Merge는 이미지의 여러 채널을 다루는 기술이다.
이미지는 여러 색상 채널(RGB, BGR, YUV 등)로 이루어져 있다.
Split은 이미지를 각 채널별로 나누는 것이고, Merge는 나눠진 채널들을 다시 합치는 과정이다.
Split (채널 분리)
void split(Mat src, Mat* mv)
이 함수는 여러 채널로 이루어진 이미지를 각각의 단일 채널 이미지들로 분리한다.
mv는 포인터인 것을 보면 눈치를 챘겠지만 배열인데, 출력 배열이다. 각각의 채널이 저장된다.
예를 들어, BGR 이미지라면 mv[0]은 B 채널, mv[1]은 G 채널, mv[2]는 R 채널이 되는 거다.
src.channels() 함수를 이용하여 이미지의 채널 수를 반환받아 이 수만큼 배열을 이용하면 된다.
Merge (채널 합치기)
void merge(InputArrayOfArray mv, OutputArray dst)
Merge는 Split의 반대 과정이다. 나눠져 있던 단일 채널 이미지들을 다시 합쳐서 하나의 이미지로 만들어준다.
mv는 각 채널들을 저장한 배열이다. 예를 들어, mv[0]은 B 채널, mv[1]은 G 채널, mv[2]는 R 채널이 된다.
dst는 결과적으로 합쳐진 이미지를 저장할 변수다.
이런 과정들이 왜 중요하냐면 이미지 처리할 때, 채널별로 따로 작업을 해야 할 때가 많다.
예를 들어, R 채널만 따로 조작하거나 그레이스케일로 바꾸려면 채널을 분리하고 나서 각각의 채널에 필터를 적용하는 게 일반적이다.
그런 다음 다시 합쳐서 최종 결과물을 만드는 거다.
Split/Merge 실전 코드를 알아보자
이 코드를 보면 이미지 채널 분리하고 다시 합치는 작업을 어떻게 하는지 확실히 알 수 있을 거다.
int main() {
Mat image, image_YUV, dst; // 원본 이미지, YUV 이미지, 병합된 이미지용 Mat 선언
Mat yuv_channels[3]; // YUV 채널을 저장할 배열 (채널 분리용)
image = imread("lena.png"); // "lena.png" 이미지를 읽어서 image에 저장
cvtColor(image, image_YUV, CV_BGR2YUV); // BGR 이미지를 YUV로 변환해서 image_YUV에 저장
split(image_YUV, yuv_channels); // YUV 이미지의 각 채널을 분리해서 yuv_channels 배열에 저장
merge(yuv_channels, 3, dst); // 분리된 3개의 YUV 채널을 다시 합쳐서 dst에 저장
imshow("input image", image); // 원본 이미지 출력
imshow("Y", yuv_channels[0]); // Y 채널 출력
imshow("U", yuv_channels[1]); // U 채널 출력
imshow("V", yuv_channels[2]); // V 채널 출력
imshow("YUV image", dst); // 다시 합쳐진 YUV 이미지 출력
waitKey(0); // 키 입력을 기다림
return 0; // 프로그램 종료
}이 코드의 결과를 살펴보면
imshow("input image", image);: 원본 이미지인 BGR 이미지를 보여준다.
imshow("Y", yuv_channels[0]);: Y 채널(밝기 정보)을 화면에 출력한다.
imshow("U", yuv_channels[1]);: U 채널(색차 정보)을 보여준다.
imshow("V", yuv_channels[2]);: V 채널(색차 정보)도 보여준다.
imshow("YUV image", dst);: 분리한 채널을 다시 합친 결과 이미지(YUV)를 보여준다.
요약하자면
이 코드는 이미지의 색상 공간을 BGR에서 YUV로 변환하고, YUV 채널을 분리한 뒤, 다시 합쳐서 각 채널을 따로 보고 합친 결과물도 볼 수 있게 해주는 코드다.
'컴공지식 > 컴퓨터비전' 카테고리의 다른 글
Pseudo Coloring 예제 (0) 2024.09.20 HSI 예제 (1) 2024.09.20 Color Conversion (0) 2024.09.20 Color Processing (0) 2024.09.20 Color Models (0) 2024.09.19