【OpenCV】OpenCV函数精讲之 -- 通道合并:merge()函数

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
发布了246 篇原创文章 · 获赞 505 · 访问量 41万+

猜你喜欢

转载自blog.csdn.net/Sophia_11/article/details/84843516