Mat初始化的双指针

时间:2013-08-07 17:39:39

标签: c++ pointers opencv mat

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

在班级标题中:Mat *Objs_avgwB[25];

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

2 个答案:

答案 0 :(得分:0)

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

相反,你可以这样做,

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

Objs_avgwB声明指针Mat,其第一行中包含25个元素。 如果您要创建一个每行包含25个元素的二维数组,则可以使用此方法,因为在这种情况下new的返回类型为Mat(*)[25]

另外,不要忘记最后致电delete[]

答案 1 :(得分:0)

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

对于框架中的每组要素,我将创建std::vectorcv::Mat个对象,每个对象对应一个感兴趣的区域。然后,使用std::deque保存每个帧的功能。

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

在每个新框架上,您push_back每个投资回报率std::vector代表该框架中的所有投资回报率:

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);

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

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