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...