opencv学习笔记-split分离和merge合并操作

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;
}

猜你喜欢

转载自blog.csdn.net/xiexu911/article/details/79722535