2012-05-23 5 views
-1

У меня есть следующий код, который является частью алгоритма, за которым я следую. как вы видите, мне нужно сделать некоторые вычисления для 10 разных групп. и в итоге получится матрица для каждой группы, которую мне нужно, чтобы воссоздать изображение из нее, проблема в том, что я не знаю, как создавать/удерживать 10 различных матриц во время цикла, а затем после цикла while я могу построить изображения один за другим. если у вас есть идеи, пожалуйста, дайте мне знать спасибо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

yep, мой вопрос в том, как удержать матрицы, но связанные с вашим ответом: std: векторы делают мой код очень медленным, есть ли у вас какие-либо другие предложения? – user261002

+0

@ user261002 Я предлагаю вам профиль и выяснить, где вы теряете время. Если это связано с копиями cv :: Mat, вы можете рассмотреть вектор указателей, динамически выделяемых cv :: Mats (или интеллектуальных указателей). – juanchopanza

+1

@ user261002 Поскольку 'cv :: Mat' использует подсчет ссылок, я думаю, что копирование должно иметь незначительные накладные расходы. Поэтому я был бы удивлен, если бы на самом деле был 'std :: vector', который делает ваш код очень медленным. –

Смежные вопросы