如何读取使用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();
是的,我知道'FileStorage'但我做不使用它的错误。现在我卡住了。 – 2014-09-26 06:34:16
考虑到这种情况,你会怎么说才能做到? – 2014-09-26 06:52:37
@ a-Jays查看更新的答案。 – herohuyongtao 2014-09-26 08:17:05