【问题标题】:OpenCV kmeans: N>=K exception , error (-215)OpenCV kmeans:N>=K 异常,错误(-215)
【发布时间】:2016-06-20 04:33:54
【问题描述】:

我的代码如下:

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 表示 .

显然 N>=K ,但我怎样才能重塑它以使其工作?

【问题讨论】:

  • cflow.cols* cflow.rows 小于 10。您应该添加更多样本。
  • 添加更多样本是什么意思?在计算的光流中?
  • 要找到 K 个聚类,您至少需要 K 个点(“p”行)。
  • Rows of cflow=288 Cols of cflow=384 这是cflow的大小。所以如果这就是你的意思,两个维度都大于 10
  • 是的,我是这个意思。可能有时会发生cflow 没有足够的元素。在致电kmeans 之前先检查一下

标签: c++ opencv k-means


【解决方案1】:

错误表示(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之前。

【讨论】:

    猜你喜欢
    • 2015-03-22
    • 1970-01-01
    • 2017-11-07
    • 2013-12-24
    • 2018-04-30
    • 2017-03-02
    • 1970-01-01
    • 1970-01-01
    • 2019-12-04
    相关资源
    最近更新 更多