merge()函数是将多个数组合并成一个多通道的数组。将一些孤立的单通道数组合并成一个多通道数组,创建一个由多个单通道阵列组成的多通道阵列。
merge()函数的C++有两个版本:
void merge(const Mat& mv, size_tcount, OutputArray dst);
void merge(InputArrayOfArray mv, OutputArray dst);
参数说明:
第一个参数:const Mat& mv,填需要被合并的输入矩阵或vector容器的阵列,这个mv参数中所有的矩阵必须有着一样的尺寸和深度。
第二个参数:size_tcount,当mv为一个空白的C数组时,代表输入矩阵的个数,必须大于1。
第三个参数:dst,输出矩阵,和mv[0]拥有一样的尺寸和深度,并且通道的数量是矩阵阵列中的通道的总数。
第i个输入数组的元素被视为mv[i]。C一般用其中的Mat::at()方法对某个通道进行存取,即channels.at()。
Mat::at()方法返回一个引用到指定的数组元素,这样修改其中一个,另一个也会随之改变。
下边是一个merge()函数示例(关于通道分离,参考《OpenCV3编程入门》通道分离:split()函数):
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <iostream>
using namespace cv;
using namespace std;
void main(){
vector<Mat> channels;
Mat imageBlueChannel;
Mat imageGreenChannel;
Mat imageRedChannel;
Mat srcImage4 = imread("mogu.jpg");
imshow("【原始图】", srcImage4);
//把一个3通道图像转换成3个单通道图像
split(srcImage4, channels);
imageBlueChannel = channels.at(0);
imageGreenChannel = channels.at(1);
imageRedChannel = channels.at(2);
//显示单通道图像
imshow("【BlueChannel】", imageBlueChannel);
imshow("【GreenChannel】", imageGreenChannel);
imshow("【RedChannel】", imageRedChannel);
//对拆分的通道数据合并
Mat mergeImage; //定义合并的输出矩阵
merge(channels, mergeImage);
//显示合并的效果
imshow("【mergeImage】", mergeImage);
waitKey();
}
原始图 | BlueChannel |
GreenChannel | RedChannel |
mergeImage |