반응형
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#include <stdio.h>
#include <opencv/cv.h>
#include <opencv/highgui.h>
 
int main() {
    IplImage *image;
    // -1이면 원본 그대로
    image = cvLoadImage("D:/opencv/sources/samples/data/aero1.jpg"-1);
 
    // 윈도우 생성(원본,R,G,B)
    cvNamedWindow("image", CV_WINDOW_AUTOSIZE);
    cvNamedWindow("R_channel_image", CV_WINDOW_AUTOSIZE);
    cvNamedWindow("G_channel_image", CV_WINDOW_AUTOSIZE);
    cvNamedWindow("B_channel_image", CV_WINDOW_AUTOSIZE);
 
    // 영상을 만들기 위해 사용하는 함수(size, depth(영상 데이터의 깊이), channels(1 = 흑백, 3 = RGB)
    IplImage *R_plane = cvCreateImage(cvGetSize(image), IPL_DEPTH_8U, 1);
    IplImage *G_plane = cvCreateImage(cvGetSize(image), IPL_DEPTH_8U, 1);
    IplImage *B_plane = cvCreateImage(cvGetSize(image), IPL_DEPTH_8U, 1);
    
    cvSplit(image, B_plane, G_plane, R_plane, 0);
 
    // 이미지 출력
    cvShowImage("image", image);
    cvShowImage("R_channel_image", R_plane);
    cvShowImage("G_channel_image", G_plane);
    cvShowImage("B_channel_image", B_plane);
 
    cvSaveImage("./image_1.jpg", image);
    cvSaveImage("./Rimage_1.jpg", R_plane);
    cvSaveImage("./Gimage_1.jpg", G_plane);
    cvSaveImage("./Bimage_1.jpg", B_plane);
    // 아무키 입력 대기
    cvWaitKey(0);
 
    cvReleaseImage(&image);
    cvReleaseImage(&R_plane);
    cvReleaseImage(&G_plane);
    cvReleaseImage(&B_plane);
    
    return 0;
}
cs


윈도우 생성 후 


split을 통해 다채널 영상을 단일 채널 영상으로 분리한다.


마지막으로 각각 분리된 이미지를 출력해주면 된다.


그리고 cvSaveImage를 통해 저장한다.









반응형