合併與分割通道數組
#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