OpenCV-顏色通道的分離、合併

OpenCV-顏色通道的分離、合併


author@jason_ql
http://blog.csdn.net/lql0716


  • OpenCV-顏色通道的分離、合併

  • 顏色通道的分離:split()

    c++: void split(const mat& src, mat* mvbegin);
    c++: void split(inputarray m, outputarrayofarrays mv);

    第一個參數,inputarray類型的m或者const mat&類型的src,填我們需要進行分離的多通道數組。

    第二個參數,outputarrayofarrays類型的mv,填函數的輸出數組或者輸出的vector容器

  • 顏色通道的合併:merge()

    merge()函數是split()函數的逆向操作,將多個數組合併成一個多通道的數組。它通過組合一些給定的單通道數組,將這些孤立的單通道數組合併成一個多通道的數組,從而創建出一個由多個單通道陣列組成的多通道陣列。

    C++; void merge(const Mat* mv, size_tcount, OutputArray dst)
    C++: void merge(InputArrayOfArrays mv, OutputArray dst)

    第一個參數,mv。填需要被合併的輸入矩陣或vector容器的陣列,這個mv參數中所有的矩陣必須有着一樣的尺寸和深度。

    第二個參數,count。當mv爲一個空白的C數組時,代表輸入矩陣的個數,這個參數顯然必須大於1

    第三個參數,dst。即輸出矩陣,和mv[0]擁有一樣的尺寸和深度,並且通洞數量是矩陣陣列中的通道的總數。

  • 顏色通道的分離、合併代碼示例

#include <opencv2/opencv.hpp>
//#include <opencv2/highgui/highgui.hpp>
//#include <opencv2/imgproc/imgproc.hpp>
//#include <opencv2/core/core.hpp>

using namespace cv;
using namespace std;

//-------------------------------------------------
//               顏色通道的分離、合併
//通道分離:split()
//通道合併:merge()
//-------------------------------------------------
//split()
//c++: void split(const mat& src, mat* mvbegin);
//c++: void split(inputarray m, outputarrayofarrays mv);
//第一個參數,inputarray類型的m或者const mat&類型的src,填我們需要進行分離的多通道數組
//第二個參數,outputarrayofarrays類型的mv,填函數的輸出數組或者輸出的vector容器
//
//merge()
//merge()函數是split()函數的逆向操作,將多個數組合併成一個多通道的數組。它通過組合一些
//給定的單通道數組,將這些孤立的單通道數組合併成一個多通道的數組,從而創建出一個由多個
//單通道陣列組成的多通道陣列。
//C++; void merge(const Mat* mv, size_tcount, OutputArray dst)
//C++: void merge(InputArrayOfArrays mv, OutputArray dst)
//第一個參數,mv。填需要被合併的輸入矩陣或vector容器的陣列,這個mv參數中所有的矩陣必須
//有着一樣的尺寸和深度。
//第二個參數,count。當mv爲一個空白的C數組時,代表輸入矩陣的個數,這個參數顯然必須大於1
//第三個參數,dst。即輸出矩陣,和mv[0]擁有一樣的尺寸和深度,並且通洞數量是矩陣陣列中的
//通道的總數。
//-------------------------------------------------


//------------------------------------【main()函數】-----------------------------------
// 描述:控制檯應用程序的入口函數,我們的程序從這裏開始
//-------------------------------------------------------------------------------------
int main()
{
    cv::Mat srcImage, dst;
    std::vector<cv::Mat> channels;

    srcImage = cv::imread("D:/test/source/img/031.jpg");

    //把一個3通道圖像轉換爲3個單通道圖像,分別存儲在channels[0], channels[1], channels[2]
    cv::split(srcImage, channels);  //分離色彩通道
    cv::merge(channels, dst); //合併色彩通道

    cv::imshow("img1", channels[0]);
    cv::imshow("img2", channels[1]);
    cv::imshow("img3", channels[2]);
    cv::imshow("img4", dst);

    cv::waitKey(0);

}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章