同じ不可解な例外に言及した質問がありますが、最小限の例で明確に質問したいと思います。
次のコードがあります。
- ファイルからすべての SIFT 記述子をロードします。
- CV_32F などの記述子を正規化します。
それから:
BowTrainer を初期化します (オンラインで見つかった例に基づくコード):
TermCriteria tc(CV_TERMCRIT_ITER,100,0.001); int retries=1; int flags=KMEANS_PP_CENTERS; BOWKMeansTrainer bow_trainer(dictionary_size, tc, retries, flags);
そして最後に:
vocabulary = bow_trainer.cluster(training_descriptors);
ここで、training_descriptors
は1218772 * 128
0,1 の正規化された SIFT 記述子を含む CV_32F 行列です。
残念ながらcluster
、次のような例外が生成されます。
OpenCV Error: Assertion failed (data.dims <= 2 && type == CV_32F && K > 0) in kmeans, file /Users/u/Downloads/OpenCV-2.4.4/modules/core/src/matrix.cpp, line 2686
行列の型は正しいです。つまり、CV_32F
誰の data.dims が <=2 である必要があるのか、なぜ K <= 0 のように見えるのかわかりません。