Opencv:无法从文本文件中使用OpenCV正确读/写?

时间:2014-11-17 07:53:17

标签: c++ opencv

系统信息: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。但我仍然看到空矩阵如上所述。

哦,所以文件没有打开,因为输出是:

  

无法打开文件存储空间!

2 个答案:

答案 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文件中保存的变量的名称。