图像通道的分离与合并

前言

不要问,就是水,前言说没就会没。

一、通道的分离(split()函数)和合并(merge()函数)

测试代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include <iostream>
#include <time.h>
#include <string>
#include <opencv2/opencv.hpp>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
using namespace std;
using namespace cv;

int main(){
Mat srcImage = imread("2.jpg");
Mat ImageBlue, ImageGreen, ImageRed;
Mat mergeImage;

vector<Mat>channels;
split(srcImage,channels);

ImageBlue = channels.at(0);
imshow("Blue Channel",ImageBlue);

ImageGreen = channels.at(1);
imshow("Green Channel",ImageGreen);

ImageRed = channels.at(2);
imshow("Red Channel",ImageRed);

merge(channels,mergeImage);
imshow("mergeImage",mergeImage);

waitKey(0);
}

效果图:
蓝色通道:

绿色通道:

红色通道:

合并通道:

1.split()函数:图像通道的分离

函数原型:

1
void split(InputArray m, OutputArrayOfArrays mv)

第一个参数为输入图像
第二个参数是函数的输出数组或者vector容器

2.merge()函数:图像通道的合并

函数原型:

1
void merge(InputArrayOfArrays mv, OutputArray dst)

可以看出merge的两个参数和split函数正好相反:
第一个参数是保存函数通道的数组或者vector容器
第二个参数为输出图像