2015-06-10 50 views
0

我想從浮動向量(vGraph1)的3D向量中填充OpenCV Mat(float)。但是,由此產生的OpenCV Mat(測試)未正確填充,即只有第一列填充了正確的值,其餘爲垃圾值(-4.32e + 08)。我通過將文字寫入文本文件來確認錯誤。難道我做錯了什麼? 親切的建議。 謝謝。如何將3D向量轉換爲cv :: Mat

int nStates = 9; const int rows = 10; const int cols = 10; 
vector < vector < vector<float> > > vGraph1; 
for(int iii = 0; iii < rows; iii++){ 
    vGraph1.push_back(vector<vector<float> >()); 
    for(int jjj = 0; jjj < cols; jjj++){ 
     vGraph1[iii].push_back(vector<float>()); 
     for(int kkk = 0; kkk < nStates; kkk++){ 
      vGraph1[iii][jjj].push_back(rand()); 
      cout << vGraph1[iii][jjj][kkk] << " "; 
     } 
     cout << endl; 
     } 
    } 
cout << "OpenCV Mat \n" << endl; 
Mat test(rows, cols, CV_MAKE_TYPE(CV_32F, nStates)); 
for(int iii = 0; iii < rows; iii++){ 
    float *ptest = test.ptr<float>(iii); 
    for(int jjj = 0; jjj < cols; jjj++){ 
     for (int kkk = 0; kkk < nStates; kkk++){ 
      ptest[kkk] = vGraph1[iii][jjj][kkk]; 
      cout << ptest[kkk] << " "; 
     } 
     cout << endl; 
    } 

} 
FileStorage Save("Mat.txt", FileStorage::WRITE); 
Save << "Node" << test; 
Save.release(); 
+0

什麼是pGraph? – Ediac

+0

pGraph是一個指向具有3D圖像紋理的Graph結構的指針。 – Benson

+0

@CNomad我編輯了代碼來表示清楚。 – Benson

回答

0

我設法得到以下工作解決方案;我希望這是正確的?

int nStates = 9; const int rows = 10; const int cols = 10; 
vector < vector < vector<float> > > vGraph1; 
for(int iii = 0; iii < rows; iii++){ 
    vGraph1.push_back(vector<vector<float> >()); 
    for(int jjj = 0; jjj < cols; jjj++){ 
     vGraph1[iii].push_back(vector<float>()); 
     for(int kkk = 0; kkk < nStates; kkk++){ 
      vGraph1[iii][jjj].push_back(rand()); 
      cout << vGraph1[iii][jjj][kkk] << " "; 
     } 
     cout << endl; 
     } 
    } 
cout << "OpenCV Mat \n" << endl; 
Mat test(rows, cols, CV_MAKE_TYPE(CV_32F, nStates)); 
for(int iii = 0; iii < rows; iii++){ 
    float *ptest = test.ptr<float>(iii); 
    for(int jjj = 0; jjj < cols; jjj++){ 
     for (int kkk = 0; kkk < nStates; kkk++){ 
      ptest[nStates*jjj + kkk] = vGraph1[iii][jjj][kkk]; 
      cout << ptest[nStates*jjj+kkk] << " "; 
     } 
     cout << endl; 
    } 

} 

FileStorage Save("Mat.txt", FileStorage::WRITE); 
Save << "Node" << test; 
Save.release();