2012-05-23 255 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,让你的代码非常慢。 –