OpenCV——操作
今天我们来详细介绍一下这两个互为冤家的函数,split函数和merge函数
详细请看https://blog.csdn.net/poem_qianmo/article/details/21176257
分离颜色通道
1.split函数
将一个多通道数组分离成几个单通道数组。
split函数分割多通道数组转换成独立的单通道数组,按公式来看就是这样:

代码示例
1 2 3 4 5 6 7 8 9 10 11 12
| Mat srcImage; Mat imageROI; vector<Mat> channels; srcImage= cv::imread("dota.jpg"); // 把一个3通道图像转换成3个单通道图像 split(srcImage,channels);//分离色彩通道 imageROI=channels.at(0); addWeighted(imageROI(Rect(385,250,logoImage.cols,logoImage.rows)),1.0, logoImage,0.5,0.,imageROI(Rect(385,250,logoImage.cols,logoImage.rows))); merge(channels,srcImage4); namedWindow("sample"); imshow("sample",srcImage);
|
1.merge函数
merge()函数的功能是split()函数的逆向操作,将多个数组组合合并成一个多通道的数组。
它通过组合一些给定的单通道数组,将这些孤立的单通道数组合并成一个多通道的数组,从而创建出一个由多个单通道阵列组成的多通道阵列。
函数解析:merge函数的功能是将一些数组合并成一个多通道的数组。关于组合的细节,输出矩阵中的每个元素都将是输出数组的串接,其中,第i个输入数组的元素被视为mv[i]。 c一般用其中的Mat::at()方法对某个通道进行存取,也就是这样用channels.at(0)。
PS: Mat::at()方法,返回一个引用到指定的数组元素。注意是引用,相当于两者等价,修改其中一个另一个跟着变.
代码示例
1 2 3 4 5 6 7 8 9 10
| vector<Mat> channels; Mat imageBlueChannel; Mat imageGreenChannel; Mat imageRedChannel; srcImage4= imread("dota.jpg"); // 把一个3通道图像转换成3个单通道图像 split(srcImage4,channels);//分离色彩通道 imageBlueChannel = channels.at(0); imageGreenChannel = channels.at(1); imageRedChannel = channels.at(2);
|