ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [OpenCV] RGB 컬러영상 Channel 별로 분리하기.
    Tech/Vision 2011. 10. 21. 16:30

    RGB 이미지를 다루다보면 각 Color Channel 별로 분리하고 싶을 때가 있다. 인덱스별로 직접 분리해내도 되지만, OpenCV에서는 mixChannels 라는 함수를 이용해서 간단히 해결할 수 있다.

    mixChannels(const Mat *src, int nsrc, Mat* dst, int ndst, const int *fromTo, size_t npairs);
    //      src - input array or vector of matrices.  
    //      nsrc - number of matrices in src.  
    //      dst - output array or vector of matrices.  
    //      ndst - number of matrices in dst.  
    //      fromTo - Array of index pairs specifying which channels are copied and where.  
    //      npairs - number of index pairs in fromTo  
    

    이 함수를 사용하는 간단한 예제는 아래와 같이 작성해볼 수 있다. 그런데 아래 예제에서 함정이 있다. OpenCV에서 칼라 이미지는 BGR 순서로 저장된다.

        Mat image;
        image = imread( "test.png", 1 );
     
        Mat image_r( image.rows, image.cols, CV_8UC1);
        Mat image_g( image.rows, image.cols, CV_8UC1);
        Mat image_b( image.rows, image.cols, CV_8UC1);
    
        Mat out[] = { image_r, image_g, image_b };
        int from_to[] = { 0,0, 1,1, 2,2 };
        mixChannels( &image, 1, out, 3, from_to, 3 );
    
        namedWindow(oriImageWindow,CV_WINDOW_AUTOSIZE );
        namedWindow(outputImageWindow1,CV_WINDOW_AUTOSIZE );
        namedWindow(outputImageWindow2,CV_WINDOW_AUTOSIZE );
        namedWindow(outputImageWindow3,CV_WINDOW_AUTOSIZE );
    
        imshow( oriImageWindow, image );
        imshow( outputImageWindow1, image_r );
        imshow( outputImageWindow2, image_g );
        imshow( outputImageWindow3, image_b );
    
        waitKey(0);
    

    댓글

Copyright 2022 JY