您的位置:首页 > 运维架构

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

2016-04-26 20:43 375 查看
首先解释下什么是多通道图像,一个普通的彩色图像的每个像素点是由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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: