2013-01-18 68 views
0

我想請求幫助閱讀和使用opencv的文件存儲向量寫矢量的墊子。使用Filestrage保存和讀取矢量Mat在OpenCV中的矢量保存並閱讀向量矢量使用Filestrage

我用這個功能來寫:

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 << "]"; 
} 

這個閱讀:

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); 
     } 
    } 
} 

代碼寫的作品不好,一個閱讀是不可能建立。 我實際上完全desparete,我已經用盡我所能想象的。我在這裏看過相同的示例代碼,但他們都沒有爲我工作。 感謝您的幫助!

回答

2

我終於自己解決了這個問題。

下面的代碼:

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 << "}"; 

} 

,這裏是讀取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); 
     } 
    } 
} 
部分