2012-12-12 46 views
1

我無法保存和讀保存到我正在迭代的cv::FileNode。我可以將矩陣寫入文件使用從OpenCV保存/讀矩陣FileNodeIterator

// Data to save 
std::vector<cv::Mat> masks; 
masks.push_back(cv::Mat::ones(3,3,CV_8UC1)); 
masks.push_back(cv::Mat::zeros(2,2,CV_8UC1)); 

// Open file for writing 
cv::FileStorage fs(file, cv::FileStorage::WRITE); 

// Create node 
fs << "data" << "["; 
for (size_t i=0; i<masks.size(); ++i) 
{ 
    // Fill each node with data 
    fs << "{:"; 
    // Write other data... 
    fs << "mask" << masks.at(i); 
    fs << "}"; 
} 
fs << "]"; 

以這種方式寫入文件不會導致問題。然而,隨後打開此文件導致未處理的異常,其打印:

Reading OpenCV Error: Parsing error (testPR.yml(7): Missing , between the elemen ts) in unknown function, file ......\modules\core\src\persistence.cpp, line 12 63

要讀取矩陣我試圖做到這一點:

// Open file for reading 
cv::FileStorage fs(file, cv::FileStorage::READ); ///< This causes an exception 

// Open node 
cv::FileNode d = fs["data"]; 
cv::FileNodeIterator it = d.begin(), it_end = d.end(); 

for(; it!= it_end; ++it) 
{ 
    // Read other data... 
    cv::Mat mask; 
    (*it)["mask"] >> mask; 
} 

當然它可能保存/讀取矩陣中的一個節點這種方式,不是嗎?

回答

0

事實證明,解決這個問題的方法是將數據保存在.xml而不是.yml文件中,儘管我不明白爲什麼會這樣。

0

當我看着http://docs.opencv.org/modules/core/doc/xml_yaml_persistence.html

In YAML (but not XML), mappings and sequences can be written in a compact Python-like inline form. In the sample above matrix elements, as well as each feature, including its lbp value, is stored in such inline form. To store a mapping/sequence in a compact form, put 」:」 after the opening character, e.g. use 「{:」 instead of 「{「 and 「[:」 instead of 「[「. When the data is written to XML, those extra 」:」 are ignored.

也許{:離不開[使用:,但我無法找到另一個文件上這個功能。但關於你的解決方案,它存儲在XML中:額外的「:」被忽略...

從我的意見來說,存儲到YAML也應該刪除「:」時工作。