2014-09-26 56 views
0

我使用簡單的std :: ofstream的保存在OpenCV的大型矩陣,就像這樣:如何讀取使用std :: ofstream保存的OpenCV矩陣數據?

Mat someData; 
std::ofstream fout("someFile"); 
fout << someData; 

它存儲在一個文件,作爲列分隔符和;作爲行分隔符的整個矩陣。

是否有可能再次將這些數據提取回OpenCV矩陣?怎麼樣?試圖與std::ifstream做相反的操作會拋出「無法綁定」的錯誤。

速度/效率/優雅不是一個問題。

回答

1

可以從您編寫的文件加載它。您可以先將整個文件加載到一個長的文件夾string中。然後按照這個線程How to split a string in C++?首先拆分基於;的整個string,即每個代表一行。之後,根據,再次分割。


PS:這是容易得多,如果你使用cv::FileStorage而I/O矩陣:

// write: 
cv::Mat m = ...; 
cv::FileStorage fs("myfile.txt", cv::FileStorage::WRITE); 
fs << "mat" << m; 
fs.release(); 

// read: 
cv::Mat m2; 
cv::FileStorage fs2("myfile.txt", cv::FileStorage::READ); 
fs2["mat"] >> m2; 
fs2.release(); 
+0

是的,我知道'FileStorage'但我做不使用它的錯誤。現在我卡住了。 – 2014-09-26 06:34:16

+0

考慮到這種情況,你會怎麼說才能做到? – 2014-09-26 06:52:37

+0

@ a-Jays查看更新的答案。 – herohuyongtao 2014-09-26 08:17:05