一、多通道图像的分离
1、通道分离: split()函数
split函数用于将一个多通道数组分离成几个单通道数。split函数的C++版本有两个原型, 分别是:
void split(const Mat& src, Mat* mvbegin);
void split(InputArray m, OutputArrayOfArrays mv);
变量介绍如下:
· 第一个参数, InputArray 类型的m 或者const Mat&类型的src ,填我们需要进行分离的多通道数组。
· 第二个参数, OutputArrayOfArrays 类型的mv , 填函数的输出数组或者输出的vector 容器。
split 函数分割多通道数组转换成独立的单通道数组,公式如下:
std::vector<cv::Mat> channels;
cv::split(m, channels)
2、通道合并: merge()函数
merge() 函数是split() 函数的逆向操作将多个数组合并成一个多通道的数组。它通过组合一些给定的单通道数组,将这些孤立的单通道数组合并成一个多通道的数组,从而创建出一个由多个单通道阵列组成的多通道阵列。它有两个基于C十+的函数原型如下。
• void merge(const Mat* mv, size_t count, OutputArray dst);
void merge(InputArrayOfArrays mv, OutputArray dst);
变量介绍如下。
· 第一个参数, mv 填需要被合井的输入矩阵或vector 容器的阵列,这个mv 参数中所有的矩阵必须有着一样的尺寸和深度。
· 第二个参数, count 当mv 为一个空白的C 数组时,代表输入矩阵的个数,这个参数显然必须大于1。
· 第三个参数, dst 即输出矩阵,和mv[0]拥有一样的尺寸和深度,井且通道的数量是矩阵阵列中的通道的总数。
函数解析如下。
merge 函数的功能是将一些数组合并成一个多通道的数组。关于组合的细节,输出矩阵中的每个元素都将是输出数组的串接。其中, 第i 个输入数组的元素被视为mv[i] 。 C 一般用其中的Mat: :at()方法对某个通道进行存取,也就是这样用:channels.at(0) 。
这里的Mat: :at()方法返回一个引用到指定的数组元素。注意是引用,相当于两者等价,也就是修改其中一个,另一个也会随之改变。
cv::merge(channels, dst);