Opencv:cv::kmeans中的“centers”参数如何工作?

3
我正在使用C++和kmeans算法对点进行聚类。聚类和每个点的绘制运行良好,我可以得到像这样的结果:

图片描述在这里输入

但是,我无法访问每个簇的中心位置(我想绘制它们)。如何在不自己计算的情况下获取中心位置?我以这种方式调用函数:
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
你可能想要查看中心矩阵的内容。
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);
}

尽管上面的代码未经测试,但我希望它能澄清这个想法。

你能添加一些代码展示如何利用中心矩阵中的数据吗? - M. K. Hunter

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接