系统信息:Windows 7,32位,opencv 2.4.10,msvs 2010
我有一个包含一些整数值的文本文件。 我想在Mat对象m中读取这些值,然后在控制台上打印出来。
到目前为止我尝试的是:
int main()
{
Mat m;
/// read:
FileStorage fs("myfile.txt",FileStorage::READ);
if (!fs.isOpened()) {std::cout << "unable to open file storage!" << std::endl; return 0;}
fs["mat1"] >> m;
cout << "mat1 = "<< endl << " " << m << endl << endl;
return 0;
}
但这会打印;
mat1 = []
文件中的实际数据是:
123456
123456
请帮助我理解这里的错误。
更新 我甚至通过简单地重命名.text文件来尝试mytext.xml。但我仍然看到空矩阵如上所述。
哦,所以文件没有打开,因为输出是:
无法打开文件存储空间!
答案 0 :(得分:1)
FileStorage无法读取任意txt文件。它需要是xml或yml。所以,如果你想以这种方式阅读它,你最好先保存它。
Mat m = ...;
/// write:
FileStorage fs("myfile.txt",FileStorage::WRITE);
fs << "mat1" << m;
fs.release(); // flush
如果您拥有的是txt文件,请尝试其他方法:
(这假定整数!)
#include <fstream>
using namespace std;
ifstream in("my.txt");
vector<int> nums;
while ( !in.eof() ) {
int n;
in >> n;
nums.push_back(n);
}
// now make a Mat from the vector:
Mat mat(nums);
答案 1 :(得分:-1)
如果您确定FileStorage
正在打开文件,请在调用此函数时检查
fs["mat1"] >> m;
mat1
是.yml
或.xml
文件中保存的变量的名称。