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

The opencv XML API is very simple, really just to get a cv::Mat on/off disk. If you are trying to do more than this I would use a regular XML library.

But most XML parsers aren't designed to read a file that is changing dynamically, they normally open the file and build a tree structure.

Could you just keep trying to open the file, check if it has changed, close it, wait and then re-open ?

于 2012-12-11T23:57:04.413 回答