Как получить пары ключ-значение из карты OpenCV FileNode?

Я храню карту в файле yaml с помощью OpenCV FileStorage, что-то вроде этого:

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, позволяет получить значения, но только после предоставления ключа.

0

Решение

Я нашел ответ благодаря @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,

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]