opencv中split函数和merge函数是一对互逆的操作,split可以把一幅图像各个通道分离开,经过对各个通道单独操作后可以用merge函数合并。若要显示单独一个通道的值要把另外两个通道清0再合并,再显示出单通道图片。
split 函数:
C++: void split(const Mat& src, Mat*mvbegin); C++: void split(InputArray m,OutputArrayOfArrays mv);
第一个参数为要进行分离的图像矩阵,第二个参数可以是Mat数组的首地址,或者一个vector<Mat>对象;
merge函数:
C++: void merge(const Mat* mv, size_tcount, OutputArray dst) C++: void merge(InputArrayOfArrays mv,OutputArray dst)
第一种:第一个参数是图像矩阵数组,第二个参数是需要合并矩阵的个数,第三个参数是输出。
第二种:第一个参数是图像矩阵向量容器,第二个参数是输出,这种方法无需说明需要合并的矩阵个数,vector对象自带说明。
后面为一个小例子的代码:
#include <iostream> #include <opencv2/opencv.hpp> using namespace std; using namespace cv; int main(int argc, char **argv) { Mat src = imread("E:/picture/teengirl.jpg"); imshow("Input img", src); vector<Mat> bgr; split(src, bgr); Mat b_img = bgr.at(0); Mat g_img = bgr.at(1); Mat r_img = bgr.at(2); Mat b_fuzhu=Mat(src.size(), CV_8UC1, Scalar(0)); vector<Mat> merg_img(3); merg_img[0] = b_img; merg_img[1] = b_fuzhu; merg_img[2] = b_fuzhu; Mat imgB(src.size(),src.type()); Mat imgG(src.size(), src.type()); merge(merg_img, imgB); imshow("B", imgB); imshow("Out", src); waitKey(0); return 0; }