0

OpenCV を使用して xml ファイルからデータを読み込もうとしています。データはビデオ録画からのものです。

私がやりたいことは、基本的に「そのフレームからのデータがない間は何もしない」という「do-while」ステートメントを書くことです

while 文で FileNode::empty() を使ってみたのですが、「オブジェクト引数なしで非静的メンバ関数を呼び出してください」というエラーが出続けて、構文を正しく理解できていないと思います。

私はプログラミングの完全な初心者なので、ステートメントを正しく構造化する方法がまったくわかりません。OpenCV のチュートリアルとリファレンス マニュアルを読んでいますが、何も解決していません。

以下は、xml ファイルの先頭からの例外です。

<frame_00000>
  <pose type_id="opencv-matrix">
    <rows>0</rows>
    <cols>0</cols>
    <dt>u</dt>
    <data></data></pose>
  <expertCode>3</expertCode>
  <autoCode>-1</autoCode></frame_00000>
<frame_00001>
  <pose type_id="opencv-matrix">
    <rows>0</rows>
    <cols>0</cols>
    <dt>u</dt>
    <data></data></pose>
  <expertCode>0</expertCode>
  <autoCode>-1</autoCode></frame_00001>
<frame_00002>
  <pose type_id="opencv-matrix">
    <rows>6</rows>
    <cols>1</cols>
    <dt>d</dt>
    <data>
      9.6603986167822176e-02 2.7534827334102827e-02
      -7.9839974858475181e-03 2.9772357539313782e+02
      2.6446663460538508e+02 1.5645098067258549e+00</data></pose>
  <expertCode>0</expertCode>
  <autoCode>0</autoCode></frame_00002>

基本的に、私がやりたいことは、各フレーム ノードを見て、それらにデータがあるかどうかを判断し、ない場合は無視することです。

FileNode::empty() ステートメントの構文に関するヒントをいただければ幸いです。

編集:

XMLファイルを開くためのチュートリアルに基づいた、これまでのコードは次のとおりです

#include "opencv2/opencv.hpp"
#include <fstream>

using namespace cv;

int main()
{
    FileStorage fs("output.xml", FileStorage::READ);
    do {
        ;
    } while ();
}
4

1 に答える 1

0

opencv XML API は非常に単純で、cv::Mat オン/オフ ディスクを取得するだけです。これ以上のことをしようとしている場合は、通常の XML ライブラリを使用します。

しかし、ほとんどの XML パーサーは、動的に変化するファイルを読み取るようには設計されていません。通常、それらはファイルを開いてツリー構造を構築します。

ファイルを開こうとして、ファイルが変更されているかどうかを確認し、閉じて、待ってから再度開いてみてください。

于 2012-12-11T23:57:04.413 に答える