2012-05-23 253 views
-1

我有以下代碼,這是我所遵循的算法的一部分。正如你所看到的,我需要爲10個不同的頻段做一些計算。並將結束爲每個樂隊,我需要從它重新創建一個圖像矩陣,問題是,我不知道如何創建/持有10循環的不同矩陣,然後在循環後,我可以構造圖像一個接一個。如果您有任何想法,請讓我知道謝謝opencv:創建矩陣或向量矩陣

cv::Mat _reconstructionMatrix(height,width,CV_8UC1); 
_reconsPointer = _reconstructionMatrix.ptr<uchar>(0); 

    while(_bandIteration<_bandsNumber){      
if(_mainMatrix.isContinuous()) 
{ 
    nCols *= nRows; 
    nRows = 1; 
} 
//for all the pixels 
for(int i = 0; i < nRows; i++) 
{   
    p = _mainMatrix.ptr<uchar>(i); 
    //in the images 
    for (int j = 0; j < nCols; j++) 
    {    
     if(_pCounter<_totalImgNO){    
      .... 
     }else{              
      ... 

      _reconsPointer[_resultFlag]=_summation; 
      _resultFlag++; 

      ...    
     } 
    }     
}   

_bandIteration++; 
} 

回答

6

您的問題有點含糊。但是,如果你問的只是how to create/hold the 10 different matrix on the while loop?,那麼你可以正常使用STL向量。

#include<vector> 
... 
std::vector<cv::Mat> listOfMatrices; 
...  
cv::Mat M = SomehowGetMatrix(); 
listOfMatrices.push_back(M); 

如果這不是你要找的,那麼請提供你的問題的更多細節。

+0

是的,我的問題是如何保存矩陣,但與您的答案有關:std:vectors使我的代碼非常慢,您有任何其他建議嗎? – user261002

+0

@ user261002我建議你的個人資料,並找出你失去的時間。如果是由cv :: Mat拷貝引起的,你可以考慮一個動態分配cv :: Mats(或者它的智能指針)的指針向量。 – juanchopanza

+1

@ user261002由於'cv :: Mat'使用引用計數,我認爲,複製它應該具有可忽略的開銷。所以我會很驚訝,如果它真的是'std :: vector's,讓你的代碼非常慢。 –