【opencv学习】之split函数提取多通道图像的单通道图像

首先解释下什么是多通道图像,一个普通的彩色图像的每个像素点是由RGB三种颜色构成的,那么这种图像就是3通道图像,其中单独的R色、G色和B色都分别称为一个单通道图像。opencv中的Mat类型实际上可以理解为一种多维多通道的矩阵,如果一个普通的彩色图像读进来后赋值给一个Mat类型的对象M,那么这个M就是一个二维数组,这个二维数组中的每个元素都是一个含有三个RGB值得数据,那这个M就是一个二维三通道的矩阵。
在opencv2中有一个函数可以将一个三通道的图像中的每个通道单独提取出来,那就是split函数。
C++: void split(const Mat& mtx, Mat* mv)
C++: void split(const Mat& mtx, vector<Mat>& mv)
有这两种定义形式:
参数mtx – 源多通道数组.
参数mv – 目标单通道数组或者单通道数组向量. 在函数中的第一个参数中通道的数和第二个参数数组大小要一致 .提出出来的单通道分别以二维单通道的形式存放在数组mv中。
#include<iostream> 
#include <opencv2/core/core.hpp> 
#include <opencv2/highgui/highgui.hpp> 
#include<vector>
using namespace std; 
using namespace cv;  


int main( )  
{  
   Mat src, srcOfMerge;
   Mat mv[3];
   //读取源彩色图片
   src = imread("D:\\code\\visualstudio\\test1\\test1\\1.jpg");
   if( !src.data ) { printf("Error loading src \n"); return -1; }
   分割彩色图片,提取出来的单通道图片存放在mv中
   split(src,mv);
   /// Create Windows
   namedWindow("RGB", 1);
   namedWindow("R", 1);
   namedWindow("G", 1);
   namedWindow("B", 1);
   imshow( "RGB", src);
   imshow("R",mv[0]);
   imshow("G",mv[1]);
   imshow("B",mv[2]);
   waitKey(0);
   return 0;
}   

你可能感兴趣的:(opencv)