灰度圖:2維矩陣
彩色圖:3維矩陣
ps:目前大部分裝置都是用無符號 8 位整數(型別為 cv_8u)表示畫素亮度
mat類定義:
class cv_exports mat
;
單通道影象:元素型別一般為 8u(即 8 位無符號整數),也可以是 16s、32f 等;這些型別可以直接用 uchar、short、float 等 c/c++語言中的基本資料型別表達
多通道影象:如rgb彩色影象,需要用三個通道來表示。在這種情況
下,如果依然將影象視作乙個二維矩陣,那麼矩陣的元素不再是基本的資料型別。可以採用vec類,表示乙個向量。如8u型別的rgb彩色影象使用vec3b。
對於 vec 物件,可以使用符號如運算元組般讀寫其元素,如:
vec3b color; //用 color 變數描述一種 rgb 顏色
color[0]=255; //b 分量
color[1]=0; //g 分量
color[2]=0; //r 分量
at()函式:實現讀取矩陣中的某個畫素,或者對某個畫素進行賦值操作。
uchar value = grayim.at(i,j);//讀出第 i 行第 j 列畫素值
grayim.at(i,j)=128; //將第 i 行第 j 列畫素值設定為 128
對影象進行遍歷,分別對單通道的 grayim 以及 3 個通道的 colorim,然後對兩個影象的所有畫素值
進行賦值,最後現實結果
mat grayim(600, 800, cv_8uc1);
mat colorim(600, 800, cv_8uc3);
//遍歷所有畫素,並設定畫素值
for( int i = 0; i < grayim.rows; ++i)
for( int j = 0; j < grayim.cols; ++j )
grayim.at(i,j) = (i+j)%255;
//遍歷所有畫素,並設定畫素值
for( int i = 0; i < colorim.rows; ++i)
for( int j = 0; j < colorim.cols; ++j )
//顯示結果
imshow("grayim", grayim);
imshow("colorim", colorim);
waitkey(0);
使用迭代器遍歷:
mat grayim(600, 800, cv_8uc1);
mat colorim(600, 800, cv_8uc3);
//遍歷所有畫素,並設定畫素值
matiterator_grayit, grayend;
for( grayit = grayim.begin(), grayend =
grayim.end(); grayit != grayend; ++grayit)
*grayit = rand()%255;
//遍歷所有畫素,並設定畫素值
matiterator_colorit, colorend;
for( colorit = colorim.begin(), colorend =
colorim.end(); colorit != colorend; ++colorit)
//顯示結果
採用指標:
mat grayim(600, 800, cv_8uc1);
mat colorim(600, 800, cv_8uc3);
//遍歷所有畫素,並設定畫素值
for( int i = 0; i < grayim.rows; ++i)
//遍歷所有畫素,並設定畫素值
for( int i = 0; i < colorim.rows; ++i) }
//顯示結果
學習OpenCV 1 開發環境的搭建
注意 本文使用環境和工具 windows10 64位專業版 visualstudio2013 opencv2.4.11 筆者經過測試,使用以下環境均可 作業系統 win7,win8,win8.1 編譯器 visualstudio2010,2013,2015 opencv2.4.x 如果使用openc...
Opencv2與opencv1的區別
一 opencv2與opencv1的區別 opencv1.0 版本於2006年面世,主要基於c語言。2009年發布opencv2,主要基於c 此時opencv庫被劃分成多個模組,這些模組被編譯成庫檔案後,位於lib資料夾中。主要有以下模組 版本1的結構見我的這篇blog opencv core 模組...
學習openCV 1 關於通道和灰度的解釋
關於通道的解釋 1 比較通俗易懂的解釋是 灰度圖的通道數為1,彩色圖的通道為3。基本上,描述乙個畫素點,如果是灰度,那麼只需要乙個數值來描述它,就是單通道。如果乙個畫素點,有rgb三種顏色來描述它,就是三通道。2 4通道通常為rgba,在某些處理中可能會用到。2通道影象不常見,通常在程式處理中會用到...