2017-04-22 4 views
1

私はOpenCV(C++版)にvector<vector<Point>>データ型のネストされた.xmlファイルを書き込もうとしていました。opencvのFileStorage :: WRITE .xmlタグ

期待される出力がされるべきである

<?xml version="1.0"?> 
<opencv_storage> 
<data> 
    <_><vector><_><point> 
      <x>162</x> 
      <y>30</y></point></_> 
     <_><point> 
      <x>162</x> 
      <y>31</y></point></_> 
     <_><point> 
      <x>161</x> 
      <y>32</y></point></_> 
     </vector></_> 
    </data> 
</opencv_storage> 

は(もループ内でタグ名を変更する必要があります):

string filename = "test.xml"; 
FileStorage fs(filename, FileStorage::WRITE); 
fs << "data" << "["; 


    for (int i = 0; i < myvector.size(); ++i) 
    { 
     //Write each vector 
     fs << "{:" << "vector" << "[:"; 

     for (int j = 0; j < myvector[i].size(); ++j) 
     { 
      fs << "{:" << "point"; 
      //Write each point 
      fs << "{" << "x" << myvector[i][j].x << "y" << myvector[i][j].y << "}"; 
      fs << "}"; // close point 
     } 
     fs << "]" << "}"; // close vector 
    } 
    fs << "]"; // close data 
    fs.release(); 

結果は次のとおりです。 しかし、私は、ループ内で作成され、常に1個の余分なタグを持っています

<?xml version="1.0"?> 
<opencv_storage> 
    <data> 
    <vector> 
     <point1> 
      <x>162</x> 
      <y>30</y> 
     </point1> 
     <<point2> 
      <x>162</x> 
      <y>31</y> 
     </point2> 
     <point3> 
      <x>161</x> 
      <y>32</y> 
     </point3> 
     </vector> 
    </data> 
</opencv_storage> 

この問題の原因は何ですか?ありがとう!

答えて

2

両方のシーケンス(「[」)とマッピング(「{」)には角括弧があります。それが働いた

string filename = "test.xml"; 
FileStorage fs(filename, FileStorage::WRITE); 
fs << "data" << "{"; 
for (int i = 0; i < myvector.size(); ++i) 
    { 
     //Write each vector 
     fs << "vector" << "{"; 

     for (int j = 0; j < myvector[i].size(); ++j) 
     { 
      fs << "point" << "{"; 
      //Write each point 
      fs << "x" << myvector[i][j].x << "y" << myvector[i][j].y ; 
      fs << "}"; // close point 
     } 
     fs << "}"; // close vector 
    } 
    fs << "}"; // close data 
fs.release(); 

詳細情報here

+0

:あなたはこれを試すことができます!ありがとう! –