如何读取使用std :: ofstream保存的OpenCV矩阵数据?

问题描述:

我使用简单的std :: ofstream的保存在OpenCV的大型矩阵,就像这样:如何读取使用std :: ofstream保存的OpenCV矩阵数据?

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

它存储在一个文件,作为列分隔符和;作为行分隔符的整个矩阵。

是否有可能再次将这些数据提取回OpenCV矩阵?怎么样?试图与std::ifstream做相反的操作会抛出“无法绑定”的错误。

速度/效率/优雅不是一个问题。

可以从您编写的文件加载它。您可以先将整个文件加载到一个长的文件夹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