Opencv:' center'参数在cv :: kmeans中工作?

时间:2017-04-16 14:33:24

标签: c++ opencv image-processing k-means opencv3.0

我使用kmeans和C ++聚类点。每个点的聚类和绘图效果很好,我可以得到这样的结果:

enter image description here

但我无法访问每个群集的中心(我想绘制它们)。如何在不自己计算中心位置的情况下获得中心位置?

我以这种方式调用函数:

vector<Point2f> points;
...
// clustering
int K = 4; // number of clusters
Mat labels; // cluster each point belongs to
Mat centers; // center of each cluster
kmeans(points, K, labels, TermCriteria( TermCriteria::EPS+TermCriteria::COUNT, 50, 1.0), 3, KMEANS_PP_CENTERS, centers);

我以这种方式绘制它们:

for(unsigned int i = 0; i < points.size(); i++ ){
      int clusterIdx = labels.at<int>(i);
      Point ipt = points[i];
      circle(cluster_image, ipt, 10, colorTab[clusterIdx], -1, 8);
    }

1 个答案:

答案 0 :(得分:0)

您可能需要查看中心矩阵的内容。

Size2i centersSize = centers.size();
std::list<Poind2f> centerPoints;
for(int i=0; i<centers.size(0); i++) {
    Point2f pt = centers.row(i);
    centerPoints.push_back(pt);
}

即使上面的代码未经测试,我希望它澄清了这个想法。