OpenCV: Taking a 3 channel RGB image, splitting channels and viewing an image with only R+G

前端 未结 4 2021
走了就别回头了
走了就别回头了 2020-12-14 07:26

I wanted to look at only the R+G channels in an RGB image because I get better contrasts to detect an object when the Blue channel is removed. I used OpenCV to split the cha

4条回答
  •  时光取名叫无心
    2020-12-14 08:10

    You need to change these lines

        channel[0]=Mat::zeros(Size(image.rows, image.cols), CV_8UC1);//Set blue channel to 0
    
        //Merging red and green channels
        merge(channel,image);
    

    to

        channel[0]=Mat::zeros(image.rows, image.cols, CV_8UC1);//Set blue channel to 0
    
        //Merging red and green channels
        merge(channel,3,image);
    

    Edit

    As per your comment here is the full code and result.

    #include 
    #include "opencv2/opencv.hpp"
    #include     
    
    using namespace cv;
    using namespace std;
    
    int main( int argc, char** argv )
    {
        if( argc != 2)
        {
         cout <<" Usage: display_image ImageToLoadAndDisplay" << endl;
         return -1;
        }
    
        Mat image,fin_img;
        image = imread("bgr.png", CV_LOAD_IMAGE_COLOR);   // Read the file
    
        if(! image.data )                              // Check for invalid input
        {
            cout <<  "Could not open or find the image" << std::endl ;
            return -1;
        }
    
       namedWindow( "Display window", CV_WINDOW_AUTOSIZE );// Create a window for display.
                          // Show our image inside it.
    
        // Create Windows
        namedWindow("Red",1);
        namedWindow("Green",1);
        namedWindow("Blue",1);
    
        // Create Matrices (make sure there is an image in input!)
    
        Mat channel[3];
        imshow( "Original Image", image );
    
    
        // The actual splitting.
        split(image, channel);
    
    
       channel[0]=Mat::zeros(image.rows, image.cols, CV_8UC1);//Set blue channel to 0
    
        //Merging red and green channels
    
        merge(channel,3,image);
        imshow("R+G", image);
        imwrite("dest.jpg",image);
    
        waitKey(0);//Wait for a keystroke in the window
        return 0;
    }
    

    Source image

    enter image description here

    Result without blue component

    enter image description here

提交回复
热议问题