2013-05-02 20 views
2

有些问题提到了同样的不可理解的例外,但我想用一个最简单的例子来清楚地问一下。在OpenCV中计算代码簿

我有以下代码:

  • 负荷全部由文件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 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应该< = 2,为什么它看起来像K < = 0.

回答

0

巧合我刚刚得到了同样的错误。就我而言,这是因为描述符Mat中有零个元素。我怀疑这是data.dims < = 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 

您是否检查过描述符数组是否为空?

+0

嗨,我解决了这个问题,但不记得我做了什么。在我的情况下,有几个描述符。 – 2014-02-20 09:51:07