opencv3 学习五 - 合并与分割通道

合并与分割通道数组

程序以下

#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 通道所有置零,和上篇博客中最后一幅图效果是同样的。函数

1. split函数,分离通道

函数原型:spa

void split(const Mat& src, vector<Mat>& dst);

参数说明:code

  1. src: 原始彩色图像,这里就是original
  2. dst: 分离后3通道图像保存的Mat数组,这里选择只有3个元素的 splitChannels

2. Mat.zeros 成员函数,生产一个全部元素为零的矩阵

函数原型:blog

static MatExpr cv::Mat::zeros(Size size, int type);

参数说明:图片

  1. size: 生成的Mat的尺寸
  2. type:生产的Mat的类型,这里用CV_8UC1,表示8bit,uchar,1 个通道。
splitChannels[2] = Mat::zeros(splitChannels[2].size(), CV_8UC1);

这条语句是把分割后的通道splitChannels[2]所有置零。原型

3. merge函数,合并通道

函数原型:博客

void cv::merge(const Mat* mv, size_t count, OutputArray dst);

参数说明:it

  1. mv: 待合并的通道
  2. count: 合并通道数
  3. dst: 输出的Mat变量
相关文章
相关标签/搜索