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變量
相關文章
相關標籤/搜索