我有一个yaml文件,格式如下:
%YAML:1.0
data1: !!opencv-matrix
rows: 50
cols: 3
dt: d
data: [ 7.1709999084472656e+01, ...
data2: !!opencv-matrix
rows: 50
cols: 3
dt: d
data: [ 7.1709999084472656e+01, ...
dataN: ...
我读取文件内容并将不同的数据保存在不同的Mats中:
QString nodeName[m_NameList.count()]= "data";
QString fullName[m_NameList.count()];
Mat inMat[m_NameList.count()];
for(int i= 0; i< m_NameList.count(); ++i)
{
fullName[i]= nodeName[i].append(QString::number(i+1));
FileStorage fsIn("file.yml", CV_STORAGE_READ);
fsIn[fullName[i].toStdString()] >> inMat[i];
}
我的问题是如果我想将其提供给= "data";
,则定义节点名称FileStorage
。有没有其他方式FileStorage
自动识别文件节点?
答案 0 :(得分:0)
好的,我自己找到了解决方案,如果其他人感兴趣的话,自动从yaml文件中读取我的节点名称。基本上我在QStringList::iterator
上迭代节点名称并将其写在FileNode
中并使用fileNode.name()
函数获取它们。
int idx= 0;
FileStorage fs("file.yml", CV_STORAGE_READ);
FileNode fileNode;
Mat inMat[m_NameList.count()];
for(QStringList::iterator it= m_NameList.begin(); it!= m_NameList.end(); ++it)
{
fileNode= fs[(*it).toStdString()];
string key= fileNode.name();
fs[key] >> inMat[idx];
cout<<"Key Name: " << key << " Mat: " << inMat[idx]<<endl;
}