合并与分割通道数组
#include "opencv2/opencv.hpp" using namespace cv; int main() { Mat original = imread("girl.jpg",CV_LOAD_IMAGE_COLOR); Mat splitChannels[3]; // 声明Mat数组,共3个元素,存放分离后的通道 split(original, splitChannels); // 分离original // 分别显示B,G,R, imshow("B", splitChannels[0]); imshow("G", splitChannels[1]); imshow("R", splitChannels[2]); waitKey(); // 把 R 通道像素值所有清零,那么这个通道就显示为黑色 splitChannels[2] = Mat::zeros(splitChannels[2].size(), CV_8UC1); Mat output; // 把3个通道合并,保存到output中, 而后显示 merge(splitChannels, 3, output); imshow("Merged", output); waitKey(); return 0; }
运行结果以下:
最后的图片就是合并通道后的图片, R 通道所有置零,和上篇博客中最后一幅图效果是同样的。函数
函数原型:spa
void split(const Mat& src, vector<Mat>& dst);
参数说明:code
函数原型:blog
static MatExpr cv::Mat::zeros(Size size, int type);
参数说明:图片
splitChannels[2] = Mat::zeros(splitChannels[2].size(), CV_8UC1);
这条语句是把分割后的通道splitChannels[2]所有置零。原型
函数原型:博客
void cv::merge(const Mat* mv, size_t count, OutputArray dst);
参数说明:it