2012-05-23 5 views
-1

다음 코드는 제가 따르고있는 알고리즘의 일부입니다. 보시다시피 저는 10 개의 다른 밴드에 대한 계산을해야합니다. 그리고 그것에서 이미지를 다시 만들 필요가 각 밴드에 대한 매트릭스로 끝날 것입니다, 문제는 내가 만드는 방법을 알고/while 루프에서 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

옙, 내 질문은 행렬을 유지하는 방법입니다,하지만 당신의 대답과 관련된 : 표준 : 벡터 내 코드를 매우 느리게 만들어, 다른 suggrstion가 있습니까? – user261002

+0

@ user261002 프로필을 작성하고 시간을 잊어 버리는 곳을 찾아내는 것이 좋습니다. cv :: Mat 복사본 때문이라면 cv :: Mats (또는 스마트 포인터)에 동적으로 할당 된 포인터의 벡터를 고려할 수 있습니다. – juanchopanza

+1

@ user261002'cv :: Mat'은 참조 카운팅을 사용하기 때문에 복사하는 데 오버 헤드가 없어야합니다. 그래서 코드가 매우 느려지는'std :: vector's라면 정말 놀라실 것입니다. –