Au lieu de tourner autour avec des pointeurs et new
, une meilleure option est d'utiliser les conteneurs fournis par la bibliothèque standard. Vous n'avez pas besoin de vous soucier de la façon exacte dont vous les initialiserez, car ils peuvent être redimensionnés dynamiquement.
Pour chaque ensemble de fonctions dans une trame, je créerais un std::vector
de cv::Mat
objets, un pour chaque région d'intérêt. Ensuite, utilisez un std::deque
pour contenir les fonctionnalités de chaque image.
std::deque<std::vector<cv::Mat>> roi_history;
Sur chaque nouveau cadre, vous le feriez push_back
chaque ROI sur le std::vector
représentant tous les ROIs dans ce cadre:
std::vector<cv::Mat> new_rois;
new_rois.push_back(roi1);
new_rois.push_back(roi2); // Etc...
vous puis pop hors du cadre le plus ancien et pousser les nouvelles données pour garder 5 images dans la file d'attente:
roi_history.pop_back();
roi_history.push_front(new_rois);
Vous pouvez ensuite accéder à chaque retour sur investissement dans l'histoire en utilisant operator[]
par exemple, pour accéder à la quatrième ROI trouvé dans la trame précédente (n'oubliez pas l'indexation zéro!):
cv::Mat my_roi = roi_history[1][3];
// ^^
// | Fourth ROI
// |
// Most recent history (zero is current frame)
Ce n'est pas un pointeur double, mais un tableau de 25 pointeurs vers 'Mat' que vous avez déclaré. Vous pouvez faire quelque chose comme ceci 'Mat (* ptr) [25]' si vous êtes sûr d'avoir '25' éléments par' row'. –