OpenCV學習 4 Mat的基本操作 1

2021-08-04 18:50:41 字數 1316 閱讀 1626

影象在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)

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 這樣生成的矩陣,...