2016-03-06 75 views
0

我的代碼是下面的:OpenCV的k均值:N> = K例外,錯誤(-215)

Mat cflow; /*computed optical flow */ 

Mat p = Mat::zeros (cflow.cols* cflow.rows, 5, CV_32F); 
... 
...(initializations of p) 
... 


int K = 10; 
cv::kmeans(p,K,bestLabels,TermCriteria(CV_TERMCRIT_EPS+CV_TERMCRIT_ITER, 10,1.0),3,KMEANS_PP_CENTERS,centers); 

我想出以下錯誤:

error: (-215) N >= K in function K means .

顯然N> = K ,但我怎樣才能重塑它,使其工作?

+0

'cflow.cols * cflow.rows'小於10.您應該添加更多示例。 – Miki

+0

你是什麼意思添加更多樣本?在計算光流量? –

+0

要查找K個集羣,您至少需要K個點(「p」行)。 – Miki

回答

0

該錯誤意味着(5維)點的數目N(即,矩陣p的行)小於K

顯然,您不能將N (<K)點羣集爲K簇。

確保矩陣p始終至少K行,把控制語句,如:

int K = 10; 
if(p.rows < K) { 
    // can't run kmeans with K cluster... 
} else { 
    // kmeans(p, K, ...); 
} 

調用kmeans之前。