我正在尝试使用OpenCV创建一个Mat
数组。该阵列用于存储感兴趣区域的N
个区域,并且对于每个区域,我必须存储最后5个帧的信息。我正在尝试使用指向Mat
的双指针。问题是如何初始化它?
我正在尝试这样的事情:
在班级标题中:Mat *Objs_avgwB[25];
并在源文件中初始化:vseg.Objs_avgwB = new Mat[vseg.avgw][25];
答案 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::vector
个cv::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)