1. 程式人生 > >cv::Mat三通道與單通道互相轉換

cv::Mat三通道與單通道互相轉換

在處理影象的過程中,經常用到三通道與單通道影象相互轉換。

先需要知道:OpenCV中儲存三通道影象具體資料的方式是BGR BGR BGR………

具體實現:

    cv::Mat SrcMat = cv::imread("1.jpg",1);                           // 1.jpg為三通道影象

    std::vector<cv::Mat>SrcMatpart(SrcMat.channels());      //生成與通道數數目相等的影象容器

    cv::split(SrcMat,SrcMatpart);                                          //

解與通道數數目相等的影象容器

    cv::Mat MergeMat;

    cv::merge(SrcMatpart,MergeMat);                                //成與通道數數目相等的影象容器

詳細分析, SrcMat被分為SrcMatpart[0]、 SrcMatpart[1]、SrcMatpart[2]三部分。

SrcMatpart[0]儲存B顏色分量,SrcMatpart[1]儲存G顏色分量,SrcMatpart[2] 儲存R顏色分量。

MergeMat為合成後BGR分量後的圖片。

SrcMat資料:53 1d 3b 58 20 3d 5c 22 3f 5f 24 40 61 27 40 61 27 40 5d 27 3e 5e 283f 5d 26 3f 5e 27 40 5d 26 41 5c 25 40 5f 28 43 60 29 42

SrcMatpart[0]:53 58 5c 5f 61 61 5d 5e 5d 5e 5d 5c 5f 60……….

SrcMatpart[1]:1d 20 22 24 27 27 27 28 26 27 26 25 28 29…………..

SrcMatpart[2]:3b 3d 3f 40 40 40 3e 3f 3f 40 41 40 43 42 …………..

MergeMat資料: 53 1d 3b 58 20 3d 5c 22 3f 5f 24 40 61 27 40 61 27 40 5d 27 3e 5e28 3f 5d 26 3f 5e 27 40 5d 26 41 5c 25 40 5f 28 43 60 29 42

對彩色影象來說,三通道中資料不同,分別表示顏色分量。對黑白影象來說,三個通道資料完全相同。

建議不再使用IplImage結構型別描述影象。