在視覺處理過程中,往往需要保存中間數據。這些數據的數據類型往往並不是整數。
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標籤下,也可換成其它標籤。可以多個<<符號連續使用,程序將自動將引號內容理解爲標籤名,不帶引號的理解爲數據變量或者常量。
在讀取數據時,[ ]中的內容爲指定的標籤,並將數據讀入>>的變量中。