1 #include <opencv2/opencv.hpp>
2 #include <iostream>
3
4 using namespace cv;
5 using namespace std;
6
7 int main(int argc, char** argv) ;
18
19 int numCluster = rng.uniform(2, 5);//定义分类种类数量块
20 printf("number of clusters : %d\n", numCluster);
21 //设置从原图像中抽取多少个数据点
22 int sampleCount = rng.uniform(5, 1000);
23 Mat points(sampleCount, 1, CV_32FC2);
24 Mat labels;
25 Mat centers;
26
27 // 生成随机数
28 for (int k = 0; k < numCluster; k++)
38 randShuffle(points, 1, &rng);
39
40 // 使用KMeans
41 kmeans(points, numCluster, labels, TermCriteria(TermCriteria::EPS + TermCriteria::COUNT, 10, 0.1), 3, KMEANS_PP_CENTERS, centers);
42
43 // 用不同颜色显示分类
44 img = Scalar::all(255);
45 for (int i = 0; i < sampleCount; i++)
50
51 // 每个聚类的中心来绘制圆
52 for (int i = 0; i < centers.rows; i++)
58
59 imshow("KMeansDataDemo", img);
60 waitKey(0);
61 return 0;
62 }
可见,随机生成的数据被分成了四块,每块的中心坐标如下:
上一篇:ITK 实例1 连接门限对脑部切片PNG图像进行二维分割下一篇:ITK 实例10 边缘保留平滑滤波对PNG图像进行二维滤波
OpenCV