我想用OpenCV創建一個Mat
數組。該陣列將存儲感興趣區域的數字N
,並且對於每個區域,我必須存儲最後5幀的信息。我試圖使用一個雙指針Mat
。問題是我如何初始化它? 我想是這樣的:Mat初始化的雙指針
在類的頭:Mat *Objs_avgwB[25];
,並在源文件中初始化:vseg.Objs_avgwB = new Mat[vseg.avgw][25];
我想用OpenCV創建一個Mat
數組。該陣列將存儲感興趣區域的數字N
,並且對於每個區域,我必須存儲最後5幀的信息。我試圖使用一個雙指針Mat
。問題是我如何初始化它? 我想是這樣的: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在前一幀(記住零索引!):
cv::Mat my_roi = roi_history[1][3];
// ^^
// | Fourth ROI
// |
// Most recent history (zero is current frame)
是的,conainers的想法是一個非常好的選擇,但是我不明白我怎麼能考慮到有N個我有5個幀隊列的投資回報率。我看到只有一個容器可用於單個投資回報率,或者您可以更好地擴大容量嗎?,我如何訪問每個投資回報率 –
這就是它std :: deque,感謝您的幫助。 –
您已聲明的指針是不是double(**)
指針Mat
數組。
相反,你可以做到這一點,
Mat (*Objs_avgwB)[25] = new Mat[vseg.avgw][25];
它聲明的指針Objs_avgwB
到Mat
,其第一行中有25個元素。 如果要創建每行包含25個元素的2-D陣列,則可以使用此功能,因爲在這種情況下新建的返回類型爲Mat(*)[25]
。
此外,不要忘記在最後撥打delete[]
。
它不是一個'double'指針,而是你指定的'Mat'的25個指針的數組。如果你確定每個「行」有25個元素,你可以像這樣做'Mat(* ptr)[25]'。 –