2 つの質問があります。最初の 1 つは、train 関数の後で ncluster が 10 から 80 に切り替わる理由です。2 番目: OpenCV を使用してコードを C から C++ に渡していますが、いくつか問題があるようです。モデルの covs を取得しようとすると例外が発生します。コードは次のとおりです。
int nclusters = 10; // Here nclusters is 10
EM em_model(nclusters, EM::COV_MAT_GENERIC);
bool isTrained = em_model.train(samples);
// Here nclusters is 80
Mat means = em_model.get<Mat>("means");
Mat weights = em_model.get<Mat>("weights");
const vector<Mat>& covs = em_model.get<vector<Mat>>("covs"); // Here I have the exception. I have tried with and without &.
デバッグ後、最後の行の後にエラーが表示されます。システムは、myprogram.exe がブレークポイントをトリガーしたことを示すウィンドウを表示します。[続行] をクリックすると、Microsoft Visual C++ Debug Library ウィンドウに次のファイルが表示されます。行: 1322; 式: _CrtIsValidHeapPointer(pUserData)。
この男にはほぼ同じコードが機能します: OpenCV 2.4.2 で CV::EM クラスを使用するには?