早期的 opencv 中,使用 iplimage 和 cvmat 資料結構來表示影象。iplimage 和 cvmat 都是 c 語言的結構。使用這兩個結構的問題是記憶體需要手動管理,開發者必須清楚的知道何時需要申請記憶體,何時需要釋放記憶體。這個開發者帶來了一定的負擔,開發者應該將更多精力用於演算法設計,因此在新版本的 opencv 中 引入了 mat 類。
新加入的 mat 類能夠自動管理記憶體。使用 mat 類,你不再需要花費大量精 力在記憶體管理上。而且你的**會變得很簡潔,**行數會變少。但 c++介面唯 一的不足是當前一些嵌入式開發系統可能只支援 c 語言,如果你的開發平台支援 c++,完全沒有必要再用 iplimage 和 cvmat。在新版本的 opencv 中,開發者依 然可以使用 iplimage 和 cvmat,但是一些新增加的函式只提供了 mat 介面。
關於mat類的定義:
class cv_exports mat ;
mat類的常用建構函式:
mat::mat() 無引數構造方法
mat::mat(int rows, int cols, int type) 建立行數為 rows,列數為 col,型別為 type 的影象
mat::mat(size size, int type) 建立大小為 size,型別為 type 的影象
mat::mat(int rows, int cols, int type, const scalar& s) 建立行數為 rows,列數為 col,型別為 type 的影象,並將所有元素初始 化為值 s
mat::mat(size size, int type, const scalar& s) 建立大小為 size,型別為 type 的影象,並將所有元素初始化為值 s
mat::mat(const mat& m) 將 m 賦值給新建立的物件,此處不會對影象資料進行複製,m 和新物件 共用影象資料
mat::mat(int rows, int cols, int type, void* data, size_t step=auto_step) 建立行數為 rows,列數為 col,型別為 type 的影象,此建構函式不建立 影象資料所需記憶體,而是直接使用 data 所指記憶體,影象的行步長由 step 指定
mat::mat(size size, int type, void* data, size_t step=auto_step) 建立大小為 size,型別為 type 的影象,此建構函式不建立影象資料所需 記憶體,而是直接使用 data 所指記憶體,影象的行步長由 step 指定
mat::mat(const mat& m, const range& rowrange, const range& colrange) 建立的新影象為 m 的一部分,具體的範圍由 rowrange 和 colrange 指 定,此建構函式也不進行影象資料的複製操作,新影象與 m 共用影象資料
mat::mat(const mat& m, const rect& roi) 建立的新影象為 m 的一部分,具體的範圍 roi 指定,此建構函式也不進 行影象資料的複製操作,新影象與 m 共用影象資料
Mat矩陣的初始化
在研究mat矩陣的初始化的時候,發現其不能像matx輕量級矩陣那樣,直接利用陣列來進行初始化,而是利用乙個內部的變數型別 scalar來進行初始化的。參考手冊中的建構函式如下所示 1 mat mat 2 mat mat int rows,int cols,int type 3 mat mat siz...
Mat矩陣的初始化
在研究mat矩陣的初始化的時候,發現其不能像matx輕量級矩陣那樣,直接利用陣列來進行初始化,而是利用乙個內部的變數型別 scalar來進行初始化的。參考手冊中的建構函式如下所示 1 mat mat 2 mat mat int rows,int cols,int type 3 mat mat siz...
OpenCV之Mat類詳解
學習mat矩陣,了解影象的儲存和mat矩陣的使用 2001年opencv剛出來的時候,是基於c語言介面而建。為了在記憶體 memory 中存放影象,當時採用名為 iplimage 的c語言結構體。其中最大的不足要數手動記憶體管理,使用者要為開闢和銷毀記憶體負責。一旦 開始變得越來越龐大,會越來越多地...