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