2013-01-18 4 views
0

Je voudrais demander de l'aide pour lire et écrire le vecteur des vecteurs de Mats en utilisant le filestorage d'opencv.Enregistrer et lire le vecteur des vecteurs de Mat dans OpenCV en utilisant Filestrage

J'utilise cette fonction pour écrire:

Template<typename _Tp>inline void writeFileNodeList(FileStorage& fs, const string& name,const vector<_Tp>& items) 
{ 
     // typedefs 
     //typedef typename vector<_Tp>::const_iterator constVecIterator; 
     vector<Mat>::iterator it; 
     // write the elements in item to fs 
     fs << name << "["; 
     for (it = items.begin(); it != items.end(); ++it) { 
      fs << *it; 
     } 
     fs << "]"; 
} 

et ceci à lire:

template<typename _Tp>inline void readFileNodeList(const FileNode& fn, vector<_Tp>& result) { 
    if (fn.type() == FileNode::SEQ) { 
     //vector<Mat>::iterator it; 
     for (FileNodeIterator it = fn.begin(); it != fn.end();it++) { 
      _Tp item; 
      it >> item; 
      result.push_back(item); 
     } 
    } 
} 

code pour l'écriture fonctionne mal et que l'on pour la lecture est impossible de construire. Je suis vraiment totalement desparete, j'ai utilisé tout ce que je peux imaginer. J'ai cherché ici les mêmes exemples de codes mais aucun d'entre eux n'a pas fonctionné pour moi. Merci pour votre aide !!!

Répondre

2

J'ai finalement résolu le problème par moi-même.

Voici le code:

void writeFileNodeList(FileStorage& fs, const string& name,vector<vector<Mat>> items) 
    { 
     int IDs=items.size(); 
     // typedefs 
     fs << name << "{"; 
     for (int i=0;i<IDs;i++) 
     { 
      stringstream ss; 
      string s; 
      string a; 
      a="ID-label"; 
      ss << (i+1); 
      s = ss.str(); 
      a+=s; 

      fs << a << "["; 

      for (int j=0;j<items[i].size();j++) 
      { 
       fs<<items[i][j];   
      } 
      fs <<"]"; 
     } 
     fs << "}"; 

} 

et voici la partie pour la lecture de retour xml

vector<vector<Mat>> readFileNodeList2(const FileNode& fn) 
{ 
    //cout <<fn.name() <<endl; 
    //cout <<fn.size() <<endl; 
    vector<vector<Mat>> output; 
    //cout << fn.isMap() << endl; 

    for (int ID=0;ID<fn.size();ID++) 
    { 
     stringstream ss; 
     string s; 
     string a; 
     a="ID-label"; 
     ss << (ID+1); 
     s = ss.str(); 
     a+=s; 
     FileNode temp_ID; 
     temp_ID=fn[a]; 
     vector<Mat> one_person_patrerns; 
     readFileNodeList(temp_ID,one_person_patrerns); 
     output.push_back(one_person_patrerns); 
    } 
    return output; 
} 

template<typename _Tp>inline void readFileNodeList(const FileNode& fn,vector<_Tp>& result) 
{ 
    if (fn.type() == FileNode::SEQ) { 
     for (FileNodeIterator it = fn.begin(); it != fn.end();) { 
      _Tp item; 
      it >> item; 
      result.push_back(item); 
     } 
    } 
} 
Questions connexes