oencv學習(6) Mat學習(1)

2021-09-25 03:24:13 字數 2411 閱讀 9119

首先,mat不僅可以存影象,也可以用來存放其他高維的資料。資料存在data指標所指向的位址中的,對於高維資料(dim維),每個資料的位址是用上面式子算的;它的乙個特例是2維資料(影象),式子簡化成了下面的那個公式。

1、關於行列問題

1 mat img1 = imread("

c:/users/administrator/desktop/lena_b_512_512.bmp

",0);//

灰度影象

2 cout

3 cout

4 cout<0]/

與img1.rows相等

5 cout<1]/

與img1.cols相等

2、取出前8*8個元素的灰度值

1 mat img1 = imread("

c:/users/administrator/desktop/lena_b_512_512.bmp

",0);//

灰度影象

2int

i,j;

3for(i=0;i<8;i++)

4

cout<

for(i=0;i<8;i++)

cout<3、陣列拷貝

mat這個類有兩部分資料。乙個是matrix header,這部分的大小是固定的,包含矩陣的大小,儲存的方式,矩陣儲存的位址等等。另乙個部分是乙個指向矩陣包含畫素值的指標。

1 mat a, c; //

creates just the header parts

2 a = imread(ar**[1], cv_load_image_color); //

here we』ll know the method used (allocate matrix)

3 mat b(a); //

use the copy constructor

4 c = a; //

assignment operator

4、建立

mat_對應的是cv_8u,

mat_對應的是cv_8s,

mat_對應的是cv_32s,

mat_對應的是cv_32f,

mat_對應的是cv_64f,

還有個需要注意的問題,就是流操作符《對於mat的操作,僅限於mat是2維的情況。

對應的資料深度如下:

• cv_8u - 8-bit unsigned integers ( 0..255 )

• cv_8s - 8-bit signed integers ( -128..127 )

• cv_16u - 16-bit unsigned integers ( 0..65535 )

• cv_16s - 16-bit signed integers ( -32768..32767 )

• cv_32s - 32-bit signed integers ( -2147483648..2147483647 )

• cv_32f - 32-bit floating-point numbers ( -flt_max..flt_max, inf, nan )

• cv_64f - 64-bit floating-point numbers ( -dbl_max..dbl_max, inf, nan

再說說mat的建立,方式有兩種,羅列一下:1.呼叫create(行,列,型別)2.mat(行,列,型別(值))。

1

//make a 7x7 complex matrix filled with 1+3j.

2 mat m(7,7,cv_32fc2,scalar(1,3

));3

//and now turn m to a 100x60 15-channel 8-bit matrix.4//

the old content will be deallocated

5 m.create(100,60,cv_8uc(15));

需要注意的是,

copy這樣的操作只是copy了矩陣的matrix header和那個指標,而不是矩陣的本身,也就意味著兩個矩陣的資料指標指向的是同乙個位址,需要開發者格外注意。比如上面這段程式,a、b、c指向的是同一塊資料,他們的header不同,但對於a的操作同樣也影響著b、c的結果。剛剛提高了記憶體自動釋放的問題,那麼當我不再使用a的時候就把記憶體釋放了,那時候再操作b和c豈不是很危險。不用擔心,opencv的大神為我們已經考慮了這個問題,是在最後乙個mat不再使用的時候才會釋放記憶體,咱們就放心用就行了。

如果想建立互不影響的mat,是真正的複製操作,需要使用函式

clone()或者copyto()。

OpenCV學習 4 Mat的基本操作 1

影象在opencv中都是通過mat類來儲存的,mat可以用來表示n維矩陣,當然用的最多的還是二維矩陣。mat類有兩部分組成 第一部分是頭資訊,這些資訊主要用來描述矩陣,比如矩陣維數ndims,rows,cols 這兩個成員變數主要用於二維矩陣,用來表示行數和列數 size,sizes,type,st...

OpenCV學習 4 Mat的基本操作 1

影象在opencv中都是通過mat類來儲存的,mat可以用來表示n維矩陣,當然用的最多的還是二維矩陣。mat類有兩部分組成 第一部分是頭資訊,這些資訊主要用來描述矩陣,比如矩陣維數ndims,rows,cols 這兩個成員變數主要用於二維矩陣,用來表示行數和列數 size,sizes,type,st...

OpenCV 學習筆記(一)Mat

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