有些问题涉及同样难以理解的例外情况,但我想以最小的例子清楚地问清楚。
我有以下代码:
然后:
初始化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
CV_32F矩阵,包含0,1个规范化的SIFT描述符。
不幸的是,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应该是&lt; = 2以及为什么它看起来像K <= 0。
答案 0 :(得分:0)
巧合的是,我得到了同样的错误。在我的情况下,这是因为描述符Mat在其中没有元素。我怀疑这是data.dims&lt; = 2所指的。
OpenCV Error: Assertion failed (data.dims <= 2 && type == CV_32F && K > 0) in kmeans, file /home/ubuntu/opencv-2.4.5/modules/core/src/matrix.cpp, line 2686
您是否检查过您的描述符数组是否为空?