如何从OpenCV FileNode映射中检索键值对

How to retrieve the key-value pairs from an OpenCV FileNode map?

本文关键字:检索 键值对 映射 FileNode OpenCV      更新时间:2023-10-16

我正在使用OpenCV FileStorage将地图存储在yaml文件中,如下所示:

cv::FileStorage fs("file.yaml.gz", cv::FileStorage::WRITE);
std::string somekey = ...;
double someval = ...;
fs << "mymap" << "{:" << somekey << someval << "}";

现在,我想取回数据,但是我不知道地图的键值。我猜代码应该是这样的:

cv::FileStorage fs("file.yaml.gz", cv::FileStorage::READ);
cv::FileNode fn = fs["mymap"];
// fn has type == cv::FileNode::MAP
// fn has size == 1 element (one pair)
// fn[0] returns also a MAP with 1 element

是否有可能在没有键的情况下获得该映射的所有对?我检查了cv::FileNodeIterator,但似乎没有解决这个问题。C接口CvFileNode允许检索值,但必须在提供键之后。

感谢@SchighSchagh,我找到了答案。

有必要使用cv::FileNodeIterator迭代节点,然后将其转换为cv::FileNode。然后将密钥存储为此cv::FileNode的名称:

cv::FileStorage fs("file.yaml.gz", cv::FileStorage::READ);
cv::FileNode fn = fs["mymap"];
for(cv::FileNodeIterator fit = fn.begin(); fit != fn.end(); ++fit)
{
  cv::FileNode item = *fit;
  std::string somekey = item.name();
  double someval = (double)item;
  ...
}

重要的是要意识到符号fit->name()不能与cv::FileNodeIterator一起工作。