先上代码
#include <iostream>
#include <opencv2/core.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/imgproc.hpp>
#include <opencv2/videoio.hpp>
#include <opencv2/video.hpp>
using namespace cv;
using namespace std;
int main(int argc, char** argv)
{
Mat srcImage = imread("700levi.jpg");
Mat imageBlueChannel, imageGreenChannel, imageRedChannel, mergeImage;
//定义Mat向量容器保存拆分后的容器
vector<Mat> channels;
//通道的拆分
split(srcImage, channels);
//提取三色的通道的数据
imageBlueChannel = channels.at(0);
imshow("imageBlueChannel", imageBlueChannel);
imageGreenChannel = channels.at(1);
imshow("imageGreenChannel", imageGreenChannel);
imageRedChannel = channels.at(2);
imshow("imageRedChannel", imageRedChannel);
//对拆分的通道数据合并
merge(channels, mergeImage);
imshow("mergeImage", mergeImage);
waitKey(0);
return 0;
}
效果
解析
个人理解就是一个函数然后填入对应的参数,把一个图像矩阵拆开或者合并,拆开多通道数组到vector中,那么vector中就按照BGR顺序来存储每个通道的数据。但是注意程序中的赋值,Mat只拷贝了头指针,也就是说,修改其中一个,另一个也会随之改变。