影象在opencv中都是通過mat類來儲存的,mat可以用來表示n維矩陣,當然用的最多的還是二維矩陣。
mat類有兩部分組成:第一部分是頭資訊,這些資訊主要用來描述矩陣,比如矩陣維數ndims,rows,cols(這兩個成員變數主要用於二維矩陣,用來表示行數和列數),size,sizes, type,step等等;第二部分是data資訊,這是乙個指標,指向mat中儲存的資料。
通過下面的**,我們建立乙個二維矩陣,並列印出矩陣:
//建立乙個5*5的2維矩陣,資料型別為8bit的無符號數,資料為3個通道,初始值都為(0,0,255)
這個矩陣的頭資訊和資料如下圖所示:
step表示每一行佔據的位元組數目,包括padding資料,其中每行中的padding資料有點嚇到我了,我們只有15個uchar而已,沒想到step竟然這麼大,而且每次執行程式還是變化的,真正的資料大小是 m.cols*m.elemsize() = 15,我們可以通過函式m.iscontinuous()知道當前矩陣是否有padding資料。
沒有padding資料時候,我們可以把矩陣的data當一維資料處理,資料長度就是rows*cols*elemsize()。
下面我看看如何訪問矩陣中的元素,並進行操作:
1. 直接訪問data,簡單快速。
for(i=0; i< m.rows; i++)
printf("\n"); }
或者用下面的**:
uchar* p;
for( i = 0; i < m.rows; ++i)
printf("\n");
或者我們也可以用at的方式得到陣列元素,m.at(i,j)[2]得到元素中的第2個分量,如果m.at(i,j),則只能取到元素的第乙個分量。
//用at的方式訪問矩陣元素
for(i=0; i< m.rows; i++)
printf("\n"); }
} 2. 用c++迭代器的方式訪問。
cv::matiterator_it, end;
for( it = m.begin(), end = m.end(); it != end; ++it)
程式原始碼:工程firstopencv2。
OpenCV學習 4 Mat的基本操作 1
影象在opencv中都是通過mat類來儲存的,mat可以用來表示n維矩陣,當然用的最多的還是二維矩陣。mat類有兩部分組成 第一部分是頭資訊,這些資訊主要用來描述矩陣,比如矩陣維數ndims,rows,cols 這兩個成員變數主要用於二維矩陣,用來表示行數和列數 size,sizes,type,st...
opencv的Mat類基本操作
官方對mat介紹的原話 the class mat represents an n dimensional dense numerical single channel or multi channel array.it can be used to store real or complex va...
OpenCV學習 5 Mat的基本操作 2
本章我們學習一下mat中的常用操作,因為在後面其它的教程中,我們經常要對影象進行各種處理,也要使用這些操作。一 mat的複製,就是從乙個矩陣a,生成相關的另乙個矩陣b。1 使用賦值的方法,比如通過建構函式生成矩陣n,通過複製生成矩陣p cv mat n m cv mat p p m 這樣生成的矩陣,...