2013-05-02 19 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