OpenCV3 之 通道分离与合并

1. 通道分离

在OpenCV中通过split()函数来实现,该函数用于将一个多通道数组分离成几个单通道数组,其函数原型如下:

void split(const Mat& src, Mat* mvbegin);
void split(InputArray m, OutputArrayOfArrays mv);
  • 参数1:需要分离的通道数组
  • 参数2:输出数组或输出的vector容器

公式如下:
m v [ c ] ( I ) = src ⁡ ( I ) c m v[c](I)=\operatorname{src}(I)_{c} mv[c](I)=src(I)c

2. 通道合并

通道合并在OpenCV中通过merge()函数实现,是split()函数的逆操作,即把多个数组合并成一个多通道数组,其函数原型如下:

void merge(const Mat* mv, size_tcount, OutputArray dst);
void merge(InputArrayOfArrays mv, OutputArray dst);
  • 参数1:被合并的输入矩阵或vector容器阵列,所有矩阵必须有统一的尺寸和深度
  • 参数2:输入矩阵的个数,此参数必须大于1
  • 参数3:输出矩阵,通道数量为矩阵阵列中通道的总数

3. 代码示例

#include
#include
using namespace std;
using namespace cv;

int main() {

	Mat srcImage,dstImage;
	vector<Mat> channels;
	srcImage = cv::imread("dota_pa.jpg");

	split(srcImage, channels);
	imshow("通道1", channels.at(0));	// 蓝色通道
	imshow("通道2", channels.at(1));	// 绿色通道
	imshow("通道3", channels.at(2));	// 红色通道
	merge(channels, dstImage);
	imshow("合成通道4", dstImage);

	waitKey(0);
	return 0;
}


参考书籍《OpenCV3编程入门》

你可能感兴趣的:(▶,CV相关)