函数原型
1. void merge(const Mat* mv, size_t count, OutputArray dst); 2. void merge(InputArrayOfArrays mv, OutputArray dst);
参数说明
- 第一个参数mv,输入合并的图像阵列,一般用vector。
- 第二个参数count,代表需要合并的矩阵个数
- 第三个参数dst,输出矩阵。
merge是split函数的逆向操作,将多个数组组合成更多通道数的多通道数组。
测试代码
#include<iostream> #include<opencv2/opencv.hpp> #include<ctime> using namespace std; using namespace cv; int main(void) { // 读取图片 Mat src = imread("tangsan.jpg");//imread()函数载入图像 // 判断是否为空 if (src.empty()) { cout << "Can not load image\n" << endl;// return -1; } // vector创建三通道Mat vector<cv::Mat> channels; cv::split(src, channels); // OpenCV的BGR色彩空间同传统意义的RGB相反,所以1通道是Blue蓝,2通道是Green绿,3通道是Red红 // 蓝通道削弱,再合并,看图片效果 channels[0] = channels[0] / 2; cv::Mat result; cv::merge(channels, result); imshow("original", src); imshow("result", result); waitKey(0); system("pause"); return 0; }
测试效果
图1 图像三通道数据示意图
图2 图像单通道数据示意图
图3 单通道处理后的效果图
如上图所示,先将图像分离成单通道进行处理,再用merge函数合并起来称为新的图像。
通道合并除了处理图像,也经常用于数据计算,最常见的就是复数的计算,后面会写相关的文章介绍具体的应用场景,比如FFT傅里叶变换。
如果文章帮助到你了,可以点个赞让我知道,我会很快乐~加油!