2013-08-07 3 views
0

OpenCV를 사용하여 Mat 배열을 만들려고합니다. 배열은 관심 영역의 숫자 N을 저장하는 것이며 각 영역에 대해 마지막 5 프레임의 정보를 저장해야합니다. Mat에 이중 포인터를 사용하려고합니다. 질문은 어떻게 초기화합니까? 나는 이런 식으로 뭔가하려고 해요 : Mat *Objs_avgwB[25];매트 초기화의 이중 포인터

및 소스 파일에 초기화 : 클래스의 헤더에서

vseg.Objs_avgwB = new Mat[vseg.avgw][25];

+0

'double'포인터가 아니라 'Mat'을 선언 한 25 개의 포인터 배열입니다. '행 (row) '당'25' 요소가 있다고 확신한다면이'Mat (* ptr) [25]와 같은 것을 할 수 있습니다. –

답변

0

포인터 대신 new을 사용하는 대신 표준 라이브러리에서 제공하는 컨테이너를 사용하는 것이 좋습니다. 동적으로 크기를 조정할 수 있기 때문에 초기화 방법에 대해 걱정할 필요가 없습니다.

프레임의 각 피쳐 집합에 대해 cv::Mat 개의 std::vector 개체를 각 관심 영역에 하나씩 만듭니다. 그런 다음 std::deque을 사용하여 각 프레임의 기능을 유지하십시오. 각각의 새로운 프레임에

std::deque<std::vector<cv::Mat>> roi_history; 

, 당신 push_back 것 그 프레임의 모든 ROI를 나타내는 std::vector 위에 각 ROI :

std::vector<cv::Mat> new_rois; 
new_rois.push_back(roi1); 
new_rois.push_back(roi2); // Etc... 

당신이 가장 오래된 프레임을 팝업 5 프레임을 유지하기 위해 새로운 데이터를 밀어을 큐에 : 그러면 예를 들어 operator[]를 사용하여 역사의 각 투자 수익 (ROI)에 액세스 할 수 있습니다

roi_history.pop_back(); 
roi_history.push_front(new_rois); 

, 발견 된 네 번째 ROI에 액세스 할 수

cv::Mat my_roi = roi_history[1][3]; 
//       ^^ 
//       | Fourth ROI 
//       | 
//       Most recent history (zero is current frame) 
+0

예, conainers 아이디어는 매우 좋은 옵션입니다. 그러나 5 개의 프레임 대기열이있는 N 개의 ROI가 있다는 것을 어떻게 고려해야하는지 알지 못합니다. 단일 투자 수익률 (ROI)에 대한 컨테이너 만 표시하거나 더 잘 분석 할 수 있습니까? 어떻게 각 ROI에 액세스 할 수 있습니까? –

+0

그건 표준입니다 : deque, 도와 줘서 고마워. –

0

당신이 선언 한 포인터하기에 double(**) 포인터 아니다 Mat 어레이.

대신이 작업을 수행 할 수

, 그 첫 번째 행이 25 개 요소가있는 Mat에 대한 포인터 Objs_avgwB를 선언

Mat (*Objs_avgwB)[25] = new Mat[vseg.avgw][25]; 

. 이 경우 new의 반환 유형이 Mat(*)[25]이기 때문에 행 당 25 개의 요소로 2 차원 배열을 만드는 경우이 값을 사용할 수 있습니다.

마지막으로 delete[]으로 전화하는 것을 잊지 마세요.

관련 문제