Splitting the image channels

You'll sometimes want to process the different channels of an image independently. For example, you might want to perform an operation only on one channel of the image. You can, of course, achieve this in an image-scanning loop. However, you can also use the cv::split function that will copy the three channels of a color image into three distinct cv::Mat instances. Suppose we want to add our rain image to the blue channel only. The following is how we would proceed:

   // create vector of 3 images 
   std::vector<cv::Mat> planes; 
   // split 1 3-channel image into 3 1-channel images 
   cv::split(image1,planes); 
   // add to blue channel 
   planes[0]+= image2; 
   // merge the 3 1-channel images into 1 3-channel image 
   cv::merge(planes,result);

The cv::merge function performs the inverse operation; that is, it creates a color image from three one-channel images.

We've successfully learned how to perform simple image arithmetic. Now let's move on to the next recipe!