1. 程式人生 > 實用技巧 >OpenCV-顏色通道的分離、合併(轉)

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

  • 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); }