0

我正在尝试Mat使用 OpenCV 制作一个数组。该数组用于存储一些N感兴趣的区域,对于每个区域我必须存储最后 5 帧的信息。我正在尝试使用指向Mat. 问题是如何初始化它?我正在尝试这样的事情:

在类的标题中:Mat *Objs_avgwB[25];

并在源文件中初始化:vseg.Objs_avgwB = new Mat[vseg.avgw][25];

4

2 回答 2

0

您声明的指针不是double(**)指向Mat数组的指针。

相反,你可以这样做,

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

它声明了一个指向Objs_avgwBa的指针,Mat它的第一行有 25 个元素。如果您要创建一个每行有 25 个元素的二维数组,则可以使用它,因为在这种情况下 new 的返回类型是Mat(*)[25].

另外,不要忘记delete[]在最后调用。

于 2013-08-07T17:54:31.743 回答
0

与其乱用指针和new,更好的选择是使用标准库提供的容器。您无需担心如何初始化它们,因为它们可以动态调整大小。

对于框架中的每一组特征,我会创建一std::vectorcv::Mat对象,每个感兴趣区域一个。然后,使用 astd::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 帧:

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

然后,您可以访问历史记录中的每个 ROI,operator[]例如,访问在前一帧中找到的第四个 ROI(记住零索引!):

cv::Mat my_roi = roi_history[1][3];
//                           ^  ^
//                           |  Fourth ROI
//                           |
//                           Most recent history (zero is current frame)
于 2013-08-07T18:00:44.063 回答