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