Access to each separate channel in OpenCV

后端 未结 5 1103
执念已碎
执念已碎 2021-01-01 10:06

I have an image with 3 channels (img) and another one with a single channel (ch1).

    Mat img(5,5,CV_64FC3);
    Mat ch1 (5,5,CV_64FC1);

I

5条回答
  •  予麋鹿
    予麋鹿 (楼主)
    2021-01-01 11:02

    You can use split function and then put zeros to the channels u want to ignore. This will result dispalying one channels out of three. See below..

    For example:

    Mat img, chans[3]; 
    img = imread(.....);  //make sure its loaded with an image
    
    //split the channels in order to manipulate them
    split(img, chans);
    
    //by default opencv put channels in BGR order , so in your situation you want to copy the first channel which is blue. Set green and red channels elements to zero.
    chans[1]=Mat::zeros(img.rows, img.cols, CV_8UC1); // green channel is set to 0
    chans[2]=Mat::zeros(img.rows, img.cols, CV_8UC1);// red channel is set to 0
    
    //then merge them back
    merge(chans, 3, img);
    
    //display 
    imshow("BLUE CHAN", img);
    cvWaitKey();
    

提交回复
热议问题