mat是一類,由兩個資料部分組成:矩陣頭(包含矩陣尺寸,儲存方法,儲存位址等)和乙個儲存所有畫素值的矩陣(可以是不同維度的矩陣)。
乙個儲存了所有畫素值,所以,不應該進行大的複製。
opencv有個機制,針對同一張影象,讓每個mat有不同的矩陣頭,但是有相同的畫素矩陣,及共享乙個矩陣。這樣的做法,也會導致改變了矩陣,那麼其他mat物件的矩陣也會變化。
mat b(a);//使用複製構造
c = a
;這樣a,b,c的矩陣是同乙個,只是矩陣頭不一樣。
實際上,a,b,c三個物件不同點在,銅鼓不同的方式訪問同一塊矩陣而已。
想使用不同的矩陣,也就是想真正的進行複製,而不是使用同乙個矩陣,可使用下面的方法。
a.copyto(b);//將a複製給b
c = a.clone();//a的clone返給c這樣的方式使得,a,b,c有不同的矩陣,修改其中任何乙個物件的矩陣,都不會影響其他的矩陣。
畫素值的儲存需要指定,顏色空間和資料型別。
2.1顏色空間
顏色空間:給定乙個顏色,如何組合顏色元素以及其編碼。最簡單的顏色空間是灰度級空間,它只有黑色和白色,隨它們進行組合便可以產生不同程度的顏色。
一般的顏色空間都是3元素或4原色。
rgb就是三原素,紅色,綠色,藍色。另一種顏色便是透明色a(alpha)。
hsv顏色空間:色調(h),飽和度(s),明度(v)
hls顏色空間:色調(h),飽和度(s),亮度(l)
等等,還有很多顏色空間,用到的再說。
每個組成元素都有自己的尺寸,比如rgb,其中乙個元素r可以是8位,16位,32位等,也可以是對應的有符號和無符號。
不同的元素從尺寸會導致影象所佔的空間大小
2.2mat的顯示建立
//下面建立了乙個2*2的2維度矩陣,其中每個點是有3通道的元素值組成
//每個元素是8位無符號,每個點對應的3各元素值初始值位0,0,255
mat a(2,2,cv_8uc3,scalar(0,0,255));
//下面建立了乙個3*3*5的3維度矩陣,其中每個點是有3通道的元素值組成
//每個元素是8位無符號,每個點對應的3各元素值初始值均為0
int m[2] = ;
mat b(3,m,cv_8uc3,scalsr::all(0));
定義符號說明
cv_[位數][帶符號與否][型別字首]c[通道數。
隨機初始化mat矩陣的值
mat a(2,2,cv_8uc3);
//元素初始化為0-255隨機值
randu(a , scalar::all(0),scalar::all(255));
mat初始化還有很多方法,這裡不再多說。 opencv 的 Mat 類使用筆記
環境 windows,visual studio 15,opencv3.4.2,c 建立乙個2 2的矩陣,a矩陣的深度是1,b的深度是2,c的深度是3 建立的矩陣的 truew deepth w 其中cv 8uc1,cv 8uc2,cv 8uc3決定寬高之外的通道數,其中8是每個數字佔8位,u是無符...
Mat 類模板
先來段 感受一下 mat 類一般應用於矩陣 matrix 的運算。mat 類繼承自mat類,對資料型別更加靈活,可定義為mat tp 的矩陣形式 templateclass mat public mat 定義類模板的方式 如果在編譯時使用了大量的元素訪問操作,並且知道矩陣型別,mat 可以更方便。直...
OpenCV中Mat類的介紹和使用
自從opencv產生以來,其函式庫一直是基於c介面構建的,因此在最初的幾個opencv版本中,一般使用名為iplimage的c語言結構體在記憶體中儲存影象。直到現在,仍然出現在大多數的舊版教程中。對於opencv1.x時代的基於c語言介面而建的影象儲存格式iplimage 如果在退出前忘記relea...