1

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 クラスを使用するには?

4

1 に答える 1

1

私はすでにそれを修正しました。VS2012 を使用して OpenCV 2.4.6 のソース ライブラリをコンパイルしたところ、動作しました。コンパイルされたものにはいくつかのバグがあるようです。

于 2013-10-04T04:30:56.773 に答える