OpenCV學習心得 5 影象通道分離

2021-06-05 04:28:08 字數 1630 閱讀 9148

轉載請註明出處與作者

opencv提供了乙個函式可以進行通道的分離,就是 cv::split.

void split(const mat& mtx, vector& mv);

void split(const mat& mtx, mat* mv);

這個函式的第二個引數是乙個std::vector容器.

需要注意的是此容器必須要預先預留空間,否則會出現記憶體洩露問題.

例如//std::vectormv; //這是錯誤的.因為這樣定義的vector並沒申請mat空間.

可以使用下面的方式申請:

std::vectormv(3); 

也可以使用下面的方式:

std::vectormv;

mv.push_back(cv::mat());

mv.push_back(cv::mat());

mv.push_back(cv::mat());

cv::split(src,mv);

cv::split的另乙個過載形式是使用乙個預先申請好的mat陣列,將陣列的頭指標傳進第二個引數.

下面是類中的程式碼:

//!分離乙個通道,如果要求的通道index無效則返回false. filltype為設定預設調色盤填充型別,為null為不設定.此函式不改變roi.此函式針對整個圖片進行處理

bool splitchannel(int channel_index,rgbquad_filltype *filltype=null);

bool copencvimage::splitchannel(int channel_index,rgbquad_filltype *filltype)

m_modifyed_for_draw=true;

return true;

}

看到其他論壇上有人問通道分離後使用cvvimage類顯示的時候都是灰度圖..這很正常的..因為cvvimage類中顯示單channel影象的時候在調色盤中填充的就是0~255的灰度值.顯示的當然是灰度影象啦..

我在這個類中有做一些改變.也就是建立了乙個rgbquad_filltype m_rgbquad_filltype的成員變數,當顯示的時候,在填充調色盤的時候會根據這個值來確定調色盤中是填充什麼樣的顏色.只有5個顏色可選,灰度,紅,綠,藍,黑白.

例如:當分離乙個3通道的bgr影象的blue通道的時候可以這樣做:

rgbquad_filltype tmp_type;

tmp_type=rgbquad_filltype_blue;

splitchannel(0,tmp_type);//顯示藍色通道的的圖

tmp_type=rgbquad_filltype_rgb;

splitchannel(2,tmp_type);//顯示紅色通道的圖

tmp_type=rgbquad_filltype_blue;

splitchannel(0,tmp_type);//顯示藍色通道的的圖

rgbquadfilltype(rgbquad_filltype_gray); //將藍色通道的圖的調色盤設定為灰度圖.這時顯示的就是灰度圖.

效果如下.

這樣顯示的圖片就是

(居然傳不上圖片)..只好等以後上傳了..

學習心得(5)

不得不說 遇到瓶頸了 洛谷的題目開始涉及低階演算法 之後還要邊學邊寫 任務重大 還是先寫一點題解吧 p1217 很久之前沒沒有過的題目 現在終於過了 發布下 容易理解 include include include include include include boolp int a 判斷質數 r...

opencv心得體會 opencv學習心得第一章

背景介紹 opencv是專門用於影象處理的機器視覺庫,python是用於快速開發的輕量級語言。opencv提供的介面可以讓python輕鬆的對這個機器視覺庫進行操作,進行影象處理。opencv中的gui特性 開發環境為linux的ubuntu使用的語言為python 1 影象的基本操作 首先我們先學...

OpenCV學習心得 7 閾值處理

轉載請註明出處與作者 opencv提供了2個函式來處理閾值.第乙個函式 double threshold inputarray src,outputarray dst,double thresh,double maxval,int thresholdtype 這個函式是使用乙個固定的值thresh來...