2012-12-12 4 views
3

openCV를 사용하여 xml 파일에서 행렬을 읽고 표시하려고합니다. 내가 파일을 열 관리해야openCV를 사용하여 XML 파일에서 행렬 읽기 및 표시

<?xml version="1.0"?> 
    <opencv_storage> 
    <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> 
etc... 

,하지만 난 그것을 컴파일 할 때 프레임 데이터를 인쇄하고 실행할 수 없습니다 : XML 파일은 다음과 같습니다.

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

using namespace cv; 
using namespace std; 

int main() 
{ 
    std::cout<< endl << "Reading:" << endl; 
    FileStorage fs; 
    fs.open("output.xml", FileStorage::READ); 

    if (fs.isOpened()) 
    { 
     cout<<"File is opened\n"; 
    } 


    Mat pose2; 
    fs["pose"] >> pose2; 
    std::cout<< pose2; 

    fs.release(); 
    return (0); 
} 

문제는 fs.release 전에 코드의 마지막 블록() 함께 : 이것은 내가 가지고있는 코드입니다. 아무리 노력해도 데이터를 표시하지 않습니다.

xml 파일의 모든 프레임 데이터를 표시하고 싶습니다. 나는 OpenCV 튜토리얼과 참조 매뉴얼을 가이드로 사용했지만 도움이되지 못했습니다.

모든 포인터는 내가 사용해야하는 명령의 기본 개요 일지라도 만족 스러울 것입니다.

+0

xml 파일을 직접 만드셨습니까? – Sassa

+0

아니요, 다른 누군가가 쓴 조각 추적 소프트웨어로 생성되었습니다. – JM92

+0

어쩌면 내가 틀렸어.하지만이 형식이되어있는 방식으로, OpenCV의 inbuilt 함수로 읽을 수있을 것 같지 않아. 간단한 XML 파서를 사용하여 작업을 수행 할 수 있습니다. 권장 사항은 [이 질문] (http://stackoverflow.com/questions/170686/best-open-xml-parser-for-c?lq=1)에서 확인하십시오. – Sassa

답변

2
FileNode n = fs.root(); 
    for (FileNodeIterator current = n.begin(); current != n.end(); current++) { 
     FileNode item = *current; 
     Mat v; 
     item["pose"] >> v; 
     cout << v << endl; 
    } 

이것은 작동합니다! :)

관련 문제