OpenCV使用FileStorage儲存Mat資料
阿新 • • 發佈:2018-11-15
在OpenCV2.0以後的版本中,加入了對C++的支援,大大減少了程式程式碼量,方便了程式編寫,也更符合現代程式設計思想。
在視覺處理過程中,往往需要儲存中間資料。這些資料的資料型別往往並不是整數。
OpenCV的C++介面中,用於儲存影象的imwrite只能儲存整數資料,且需作為影象格式。當需要儲存浮點資料或XML/YML檔案時,OpenCV的C語言介面提供了cvSave函式,但這一函式在C++介面中已經被刪除。取而代之的是FileStorage類。
具體使用方法參照這個例子:
矩陣儲存
-
Mat mat = Mat::eye(Size(
12
,
12), CV_8UC1);
-
FileStorage fs(".\\vocabulary.xml", FileStorage::WRITE);
-
fs<<
"vocabulary"<<mat;
-
fs.release();
在另一處,需要載入這個矩陣資料。程式碼如下:
-
FileStorage fs(".\\vocabulary.xml", FileStorage::READ);
-
Mat mat_vocabulary;
-
fs[
"vocabulary"] >> mat_vocabulary;
在儲存資料時,fs<<"vocabulary"<<mat將mat矩陣儲存在了宣告fs物件時制定的xml檔案的vocabulary標籤下,也可換成其它標籤。可以多個<<符號連續使用,程式將自動將引號內容理解為標籤名,不帶引號的理解為資料變數或者常量。
在讀取資料時,[ ]中的內容為指定的標籤,並將資料讀入>>的變數中。