OpenCV中Mat 型別學習筆記

2021-07-23 15:27:33 字數 3039 閱讀 5836

printf("img.size()函式返回值: \n");//

cout <

報錯:

原因,mat.step1(0)  需要用圓括弧

mat的step,size,step1,elemsize,elemsize1這幾個屬性非常容易混淆。 opencv的官方參考手冊也沒有解釋清楚這幾個概念。

step1(i):每一維元素的通道數

step[i]:每一維元素的大小,單位位元組

size[i]:每一維元素的個數

elemsize():每個元素大小,單位位元組

elemsize1():每個通道大小,單位位元組

這個解釋可能有點抽象,結合示例程式和示意**釋這幾個概念

[cpp]view plain

copy

void

learn_mat_definiton()

//測試一下step的各個維度大小

;//每一維元素的個數:8:行,10:列

mat mat1(3,matsize, cv_16uc3, scalar::all(0));  

//求step[i]的大小:每一維元素的大小(單位位元組)

printf("\n///step[i]的大小//\n"

);  

printf("step[0]:%d\n"

,mat1.step[0]);

//480:面的大小(第一維)

printf("step[1]:%d\n"

,mat1.step[1]);

//60:線的大小(第二維)

printf("step[2]:%d\n"

,mat1.step[2]);

//6:點的大小(第三維)

//求size[i]:每一維元素的個數

printf("\n///size[i]的大小///\n"

);  

printf("size[0]:%d\n"

,mat1.size[0]);

//5:面

printf("size[1]:%d\n"

,mat1.size[1]);

//8:線

printf("size[2]:%d\n"

,mat1.size[2]);

//10:點

//求step1(i):每一維元素的通道數

printf("\n///step1(i)的大小///\n"

);  

printf("step1(0):%d\n"

,mat1.step1(0));

//240:面

printf("step1(1):%d\n"

,mat1.step1(1));

//30:線

printf("step1(2):%d\n"

,mat1.step1(2));

//3:點

//求elemsize:每個元素的大小(單位位元組)

printf("\n///elemsize的大小///\n"

);  

printf("elemsize:%d\n"

,mat1.elemsize());

//6:每個元素的大小

//求elemsize1:每個通道的大小(單位位元組)

printf("\n///elemsize1的大小///\n"

);  

printf("elemsize1:%d\n"

,mat1.elemsize1());

//2:每個通道的大小

}  

程式結果

這裡我們定義了乙個三維矩陣

int matsize = ;//每一維元素的個數:8:行,10:列

mat mat1(3,matsize, cv_16uc3, scalar::all(0));

示意圖如下圖

每一維的元素表示什麼意思呢?

這裡我們以空間幾何的角度來解釋,能夠更加容易理解一點。

三維矩陣,一共有三維,我們分別模擬為

面:每個二維矩陣,表示第1維的元素

線:矩陣的每一行,表示第2維的元素

點:矩陣中每行的每個元素,表示第3維的元素

那麼這樣子就可以解釋清楚每一維元素的含義了。

以step[i]為例

step[0]:面的大小,第1維的元素的大小,也就是二維矩陣的大小,乙個二維矩陣有8行,所以step[0]=step[1]*8=480

step[1]:線的大小,第2維的元素的大小,也就是二維矩陣每一行的大小,由於每個元素大小為6,每行有10個元素,所以step[1]=10*6=60

step[2]:點的大小,第3維的元素的大小,這裡矩陣的每個元素型別為cv_16uc3,所以step[2]=2*3=6個位元組

這裡注意:

1.step的大小是位元組

2.注意下標與維數的對應關係:下標2對應點,1對應線,0對應面

3.矩陣有幾維,step陣列就有幾個元素,如3維,則有3個元素,step[0],step[1],step[2].分別對應面,線,點

只要記住,最後乙個總是表示點,然後依次向前為線,面...

4.第2,3 點 ,對於size和step1()也一樣。

step1(i)和size

與step[i]原理相同。

elemsize  表示每個元素的大小(單位位元組),每個元素可能有多個通道,示例中,每個元素有三個通道,而每個通道型別為cv_16u,算3個通道的總數, 2*3=6

elemsize1 每個通道的大小(單位位元組),cv_16=2位元組

python型別學習

核心筆記 布林值 下列物件的布林值是false。標準型別的內建函式 cmp repr str type 標準型別的分類 一句話概括標準型別 基本內建資料物件原始型別 1.儲存模型 儲存模型 分類python型別 標量 原子模型 數值,字串 容器型別 列表,元祖,字典 2.更新模型 更新模型 分類py...

opencv中Mat資料型別的應用

1.初始化 1 cv mat m 3,4,cv 32f,cv scalar 0 2 mat mat mat zeros color.rows,color.cols,cv 8uc3 ones 3 unsigned char data cv mat img height,width,cv 8uc3,un...

OpenCV 學習筆記(一)Mat

opencv是由c語言實現的,實際上它使用的結構體也是遵循物件導向思想設計的,iplimage由cvmat派生 資訊 和乙個指向儲存所有畫素值的矩陣 根據所選儲存方法的不同矩陣可以是不同的維數 的指標。mat矩陣頭 包括 typedef struct cvmat data ifdef cpluspl...