Mat
OpenCV を使用して配列を作成しようとしています。配列はN
、関心のある領域の数を格納することであり、領域ごとに最後の 5 フレームの情報を格納する必要があります。へのダブルポインターを使用しようとしていますMat
。問題は、どのように初期化するかです。私はこのようなことを試みています:
クラスのヘッダー:Mat *Objs_avgwB[25];
ソースファイルで初期化するには:vseg.Objs_avgwB = new Mat[vseg.avgw][25];
double(**)
宣言したポインタはMat
配列へのポインタではありません。
代わりに、これを行うことができます。
Mat (*Objs_avgwB)[25] = new Mat[vseg.avgw][25];
これは、最初の行に 25 個の要素があるObjs_avgwB
へのポインターを宣言します。Mat
この場合の new の戻り値の型はMat(*)[25]
.
delete[]
また、最後に を呼び出すことを忘れないでください。
ポインターと をいじる代わりにnew
、標準ライブラリーによって提供されるコンテナーを使用することをお勧めします。それらは動的にサイズ変更できるため、正確にどのように初期化するかについて心配する必要はありません。
フレーム内のフィーチャ セットごとに、対象領域ごとに 1 つstd::vector
のオブジェクトを作成します。cv::Mat
次に、 a を使用し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[]
次に、たとえば、前のフレームで見つかった 4 番目の ROI にアクセスするために、履歴内の各 ROI にアクセスできます(インデックスがゼロであることを思い出してください!)。
cv::Mat my_roi = roi_history[1][3];
// ^ ^
// | Fourth ROI
// |
// Most recent history (zero is current frame)