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

Posted

技术标签:

【中文标题】Opencv:\'centers\'参数如何在 cv::kmeans 中工作?【英文标题】:Opencv: how does the 'centers' parameter work in cv::kmeans?Opencv:'centers'参数如何在 cv::kmeans 中工作? 【发布时间】:2017-09-12 07:03:50 【问题描述】:

我正在使用带有 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】:

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

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

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

【讨论】:

你能添加一些代码来展示如何利用中心矩阵中的数据吗?

以上是关于Opencv:'centers'参数如何在 cv::kmeans 中工作?的主要内容,如果未能解决你的问题,请参考以下文章

# OpenCV 例程200篇214. 绘制椭圆的参数详解

OpenCV 3:如何将 cv::Mat 作为可选参数传递

OpenCV 例程200篇213. 绘制圆形

OpenCV的,如何将参数传递到cv2.TrackerMedianFlow_create功能?

opencv 9 -- 轮廓 特征 三

opencv 9 -- 轮廓 特征 三