Mat初始化的双指针
Double pointer of Mat initialization
我正在尝试使用OpenCV制作一个Mat
数组。该阵列将存储感兴趣区域的数量N
,并且对于每个区域,我必须存储最后5帧的信息。我正在尝试使用指向Mat
的双指针。问题是我该如何初始化它?我正在尝试这样的东西:
在类的标题中:Mat *Objs_avgwB[25];
并在源文件中初始化:vseg.Objs_avgwB = new Mat[vseg.avgw][25];
与其摆弄指针和new
,更好的选择是使用标准库提供的容器。您不需要担心如何初始化它们,因为它们可以动态调整大小。
对于帧中的每组特征,我将创建一个std::vector
的cv::Mat
对象,每个感兴趣的区域一个。然后,使用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帧:
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)
您声明的指针不是指向Mat
数组的double(**)
指针。
相反,你可以这样做,
Mat (*Objs_avgwB)[25] = new Mat[vseg.avgw][25];
其声明指向第一行中具有25个元素的CCD_ 16的指针CCD_。如果您要创建一个每行有25个元素的2-D数组,则可以使用此方法,因为在这种情况下,new的返回类型是Mat(*)[25]
。
另外,不要忘记在最后调用delete[]
。
相关文章:
- 如何使用数据对象上的常量指针初始化类
- 使用指针初始化 char 数组或字符串 C++
- 使用无效指针初始化指针声明符的行为是否未定义?
- 指针:初始化与声明
- 启动线程会导致指针初始化时出现分段错误
- 使用函数声明进行函数指针初始化 - 是否可能
- 类初始化中的指针初始化
- 结构数组的指针初始化
- 如何从其抽象母类上的指针初始化子类?
- C 用结构指针初始化结构
- 如何用无效指针初始化unique_ptr的向量
- PCL中的这些增强指针初始化是不同的
- 通过指针初始化结构
- 从函数指针初始化成员函数
- 使用作用域内生成的指针初始化静态成员
- 使用"this"指针初始化 std::array
- C++缺乏指针初始化和使用逻辑
- constexpr 使用指针初始化
- C 指针初始化的不良初始化可能是什么后果
- 指针初始化无效?如果不是,那是什么