0

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、キーを提供した直後に値を取得できます。

4

1 に答える 1

4

@SchighSchaghのおかげで答えが見つかりました。

でノードを反復処理し、cv::FileNodeIterator後で にキャストする必要がありますcv::FileNode。次に、キーは this の名前として保存されます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ください。

于 2013-05-08T07:44:33.300 に答える