opencv多通道資料和多維資料的區別

2021-07-04 12:52:56 字數 1665 閱讀 5362

opencv中經常要用到多通道矩陣來處理彩色影象,同時多維度的矩陣在opencv中也會經常遇到,這裡對這兩種資料結構做乙個對比。總體來說,對這兩種資料結構opencv在處理上是不同的,主要是資料的儲存安排上不同。多通道資料仍然是按照二維資料的方式來存放資料,不過於正常的二維矩陣相比較,單個元素包含了多個資料值如b、g、r。而多維矩陣是多個層級的二維矩陣組合而成。下面是一些細節對比,和該結論的依據。

opencv中多維資料的申請:

int sz=;

mat dm(3,sz,cv_8u,scalar(0));

這樣申請得到

3*2*2的矩陣,並初始化為

0。這裡

3是第0維,是層的概念,

2*2是二維空間中的平面概念。

這一點可以由

dm.step[0]=4, dm.step[1]=2,dm.step[0]=1得到驗證。這裡的儲存資料是按照行儲存,然後按列,最後按層。

dm(k,i,j)=pdm=dm.data+dm.step[0]*k+dm.step[1]*i+dm.step[2]*j;其中

k是層數,

i是行數,

j是列數

opencv中多通道資料的申請:

mat d(2,2,cv_8uc3,scalar(0));

這裡得到的仍然是乙個二維矩陣,每個元素由

3個值構成如

b,g,

r。這裡儲存資料先儲存每個元素的

3個子值,然後按行排列元素,再按照行儲存。這點和多維矩陣不同。

這一點可以由

d.step[0]=6,d.step[1]=3,,d.step[2]沒有意義,得到驗證。

這裡可以按照指標方式對矩陣元素進行訪問,也可以以模板類

mat_進行訪問或者利用

split函式分離出

b、g、

r三個分量矩陣按照二維方式進行處理。

指標方式:

b=dm.data+dm.step[0]*i+dm.step[1]*j+0;

b=dm.data+dm.step[0]*i+dm.step[1]*j+1;

b=dm.data+dm.step[0]*i+dm.step[1]*j+2;

模板類

mat_方式:

mat_d_=d;

d_(0,0)便表示多通道矩陣中第乙個元素的

3個b、

g、r分量值,它是

vec3b型別的資料,

d_(0,0)[0]、

d_(0,0)[1]、

d_(0,0)[2]、分別訪問

b、g、

r的值。

split函式轉化為

b

g

r3個二維矩陣:

vectorm_ch;

split(d,m_ch);

這樣m_ch[0]、

m_ch[1]、

m_ch[2]、分別表示

b、g、

r的分量矩陣。

OpenCV 分離顏色通道 多通道顏色混合

通道分離用到split 函式,該函式用於將多個通道陣列分離成幾個單通道陣列,該函式的c 版本有兩個原型 void split const mat src,mat mvbegin void split inputarray m,outputarrayofarrays mv 第乙個引數,inputarr...

單通道和多通道卷積

卷積之後的通道數只是取決於卷積核的數目,和卷積核的channel無關,卷積核的channel是和輸入的channel保持一致的。對於單通道影象,若利用10個卷積核進行卷積計算,可以得到10個特徵圖 若輸入為多通道影象,則輸出特徵圖的個數依然是卷積核的個數 10個 1.單通道多個卷積核卷積計算 乙個卷...

opencv中關於行列通道還有通道數的元組的理解

1 影象的通道指的是什麼?是不是灰度圖的通道數為1,彩色圖的通道為3?zhuker 正確!基本上,描述乙個畫素點,如果是灰度,那麼只需要乙個數值來描述它,就是單通道。如果乙個畫素點,有rgb三種顏色來描述它,就是三通道。ollydbg23 2 對於2通道和4通道如何看待?哪位幫忙解釋一下?feixu...