首先,mat不僅可以存影象,也可以用來存放其他高維的資料。資料存在data指標所指向的位址中的,對於高維資料(dim維),每個資料的位址是用上面式子算的;它的乙個特例是2維資料(影象),式子簡化成了下面的那個公式。
1、關於行列問題
1 mat img1 = imread("2、取出前8*8個元素的灰度值c:/users/administrator/desktop/lena_b_512_512.bmp
",0);//
灰度影象
2 cout
3 cout
4 cout<0]/
與img1.rows相等
5 cout<1]/
與img1.cols相等
1 mat img1 = imread("cout<c:/users/administrator/desktop/lena_b_512_512.bmp
",0);//
灰度影象
2int
i,j;
3for(i=0;i<8;i++)
4
for(i=0;i<8;i++)
cout<3、陣列拷貝
mat這個類有兩部分資料。乙個是matrix header,這部分的大小是固定的,包含矩陣的大小,儲存的方式,矩陣儲存的位址等等。另乙個部分是乙個指向矩陣包含畫素值的指標。
1 mat a, c; //4、建立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
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...