c++ - Opencv: 'centers' 参数在 cv::kmeans 中如何工作?

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

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

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);
    }

最佳答案

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

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/

相关文章:

c++ - C/C++ 标签 (goto) 的数量如何影响性能?

python - 类型错误 : Could not build a TypeSpec with type KerasTensor

c++ - 如何使用 opencv (c++) 分割光滑表面上的异常

c++ - 改进背景扣除

java - 将 BufferedImage 转换为另一种类型

c++ - 实现一个数组类,作业麻烦

c++ - 如何以用户友好的形式将 'double' 转换为 'string'

c++ - 在Linux上链接嵌入Lua的静态库时出错

javascript - Opencvjs 图像处理

c# - OpenCVSharp坐标与System.Drawing坐标之间的转换