0

MatOpenCV を使用して配列を作成しようとしています。配列はN、関心のある領域の数を格納することであり、領域ごとに最後の 5 フレームの情報を格納する必要があります。へのダブルポインターを使用しようとしていますMat。問題は、どのように初期化するかです。私はこのようなことを試みています:

クラスのヘッダー:Mat *Objs_avgwB[25];

ソースファイルで初期化するには:vseg.Objs_avgwB = new Mat[vseg.avgw][25];

4

2 に答える 2

0

double(**)宣言したポインタはMat配列へのポインタではありません。

代わりに、これを行うことができます。

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

これは、最初の行に 25 個の要素があるObjs_avgwBへのポインターを宣言します。Matこの場合の new の戻り値の型はMat(*)[25].

delete[]また、最後に を呼び出すことを忘れないでください。

于 2013-08-07T17:54:31.743 に答える
0

ポインターと をいじる代わりに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)
于 2013-08-07T18:00:44.063 に答える