如何从OpenCV FileNode映射中检索键值对
How to retrieve the key-value pairs from an OpenCV FileNode map?
我正在使用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
一起工作。
相关文章:
- 在C++中共享键值对的最佳方式
- 使用无序映射在STL中存储键值对
- c++同一个键的多个键/值对
- C++中的键值对:<val1, val2> 键<frequency>与值一样
- 在 std::unordered_map 中插入新的键/值对会导致"out of range"异常
- 读取数组中每个对象的所有键值对
- 这C++ unordered_map怎么有四个值?我以为这是一个键值对
- 使用 k 个键值对为零的存储桶初始化 c++14 unordered_map
- 从配置文件qsetting中删除键/值对
- 如何使用卡萨布兰卡在现有的web::json::value对象中附加新的键值对?
- 是否可以创建字符串和原子<int>键值对的unordered_map?
- 检索16k键值对的最快方法
- 将键值对文件读入 std::map
- 为什么用Spirit解析一个空行会在映射中产生一个空的键值对
- 从unordered_map C++中删除键/值对
- 如何将键值对引用从一个映射复制到同一类型的另一个映射
- 从键值对进行双向查找
- 如何从映射中修改键值对的值,而我不知道该键是否存在于映射中
- 提升精神 - 跳过键值对中不需要的行
- 如何从OpenCV FileNode映射中检索键值对