OpenCV-通道合并cv::merge

作者:翟天保Steven
版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处

函数原型

void merge(const Mat* mv, size_t count, OutputArray dst);
void merge(InputArrayOfArrays mv, OutputArray dst);

参数说明

  1. 第一个参数mv,输入合并的图像阵列,一般用vector。
  2. 第二个参数count,代表需要合并的矩阵个数
  3. 第三个参数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傅里叶变换。

       如果文章帮助到你了,可以点个赞让我知道,我会很快乐~加油!

© 版权声明
THE END
喜欢就支持一下吧
点赞367 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容