Opencv:无法从文本文件正确读取/写入 OpenCV

Opencv: Unable to correctly read/write from/to using OpenCV from a text file?

本文关键字:读取 写入 OpenCV 文件 文本 Opencv      更新时间:2023-10-16

系统信息: 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

所以请帮助我了解这里出了什么问题。

更新我甚至尝试了mytext.xml只需重命名.text文件即可。但我仍然看到空矩阵如上所示。

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

无法打开文件存储!

文件存储无法读取任意 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);

如果您确定FileStorage正在打开文件,请在调用此函数时检查

fs["mat1"] >> m;

mat1 是保存在 .yml.xml文件中的变量的名称。