1. 程式人生 > >OpenCV使用FileStorage儲存Mat資料

OpenCV使用FileStorage儲存Mat資料

在OpenCV2.0以後的版本中,加入了對C++的支援,大大減少了程式程式碼量,方便了程式編寫,也更符合現代程式設計思想。


在視覺處理過程中,往往需要儲存中間資料。這些資料的資料型別往往並不是整數。

OpenCV的C++介面中,用於儲存影象的imwrite只能儲存整數資料,且需作為影象格式。當需要儲存浮點資料或XML/YML檔案時,OpenCV的C語言介面提供了cvSave函式,但這一函式在C++介面中已經被刪除。取而代之的是FileStorage類。


具體使用方法參照這個例子:

矩陣儲存


  
  1. Mat mat = Mat::eye(Size( 12
    , 12), CV_8UC1);
  2. FileStorage fs(".\\vocabulary.xml", FileStorage::WRITE);
  3. fs<< "vocabulary"<<mat;
  4. fs.release();
在另一處,需要載入這個矩陣資料。程式碼如下:


  
  1. FileStorage fs(".\\vocabulary.xml", FileStorage::READ);
  2. Mat mat_vocabulary;
  3. fs[ "vocabulary"] >> mat_vocabulary;
在儲存資料時,fs<<"vocabulary"<<mat將mat矩陣儲存在了宣告fs物件時制定的xml檔案的vocabulary標籤下,也可換成其它標籤。可以多個<<符號連續使用,程式將自動將引號內容理解為標籤名,不帶引號的理解為資料變數或者常量。

在讀取資料時,[ ]中的內容為指定的標籤,並將資料讀入>>的變數中。