我在 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);
}
最佳答案
您可能想查看中心矩阵的内容。
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);
}
尽管上面的代码未经测试,但我希望它能阐明这个想法。
关于c++ - Opencv: 'centers' 参数在 cv::kmeans 中如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43438318/