有些问题指的是同一个难以理解的例外,但我想用一个最小的例子来清楚地问它。
我有以下代码:
- 从文件中加载所有 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。