OpenCVKmeans算法默认使用了Kmeans++选取种子点

参考:OpenCv中Kmeans算法实现和使用

//效果:根据半径聚类,并不一定能得到好的结果。
float CBlotGlint::ClusterByR( )
{
//根据半径大小聚类,找出合适的类别个数和每一类的个数
std::vector<float> radiuses(this->blobs.size() );
std::vector<std::pair<float,int> > radiusesIdx(this->blobs.size() );
for ( int i=0; i< this->blobs.size(); ++i ){
radiuses[i] =this->blobs[i].diaGlint;
radiusesIdx[i].first = radiuses[i];
radiusesIdx[i].second = i;
} {
using namespace cv; this->blobs[0].diaGlint; const int MAX_CLUSTERS = 5;
Scalar colorTab[] =
{
Scalar(0, 0, 255),
Scalar(0,255,0),
Scalar(255,100,100),
Scalar(255,0,255),
Scalar(0,255,255)
}; Mat img( 500, 500, CV_8UC3 );
RNG rng( 12345 );
std::vector<std::vector<float> > outC;
std::vector<std::vector<std::pair<float,int> > > outCidx; {
outC.clear();
int k;
int clusterCount = rng.uniform(2, MAX_CLUSTERS+1);
int i;
int sampleCount =radiuses.size();// rng.uniform(1, 1001);
Mat points(sampleCount, 1, CV_32FC1), labels;
for ( int i=0; i< sampleCount; ++i ){
points.at<float>(i) = radiuses[i];
} clusterCount = MIN(clusterCount, sampleCount);
clusterCount = std::max(clusterCount,3);
clusterCount = 3; Mat centers;
kmeans(points, clusterCount, labels,
TermCriteria( CV_TERMCRIT_EPS+CV_TERMCRIT_ITER, 10, 1.0),
3, KMEANS_PP_CENTERS, centers); outC.resize( clusterCount );
outCidx.resize( clusterCount ); img = Scalar::all(0);
for( i = 0; i < sampleCount; i++ )
{
int clusterIdx = labels.at<int>( i );
outC[clusterIdx].push_back( points.at<float>( i ) );
outCidx[clusterIdx].push_back(
std::make_pair ( points.at<float>( i ) ,radiusesIdx[i].second ) ); Point ipt = this->blobs[i].centerOfGlint;
circle( img, ipt, 2, colorTab[clusterIdx], CV_FILLED, CV_AA );
} cv::imshow("clusters", img); char key = (char)cv::waitKey(1);
} return 0; } return 1.0;
}

即使如此,每次聚类的效果仍然不一定相同,显示一定的随机性。

OpenCV: Kmeans的使用一维和二维点集的更多相关文章

  1. Mojo 返回一维和二维数组

    这种情况不断的网数组@arr2里放入数据,返回的内容为: 这种情况是一维数组: while( $selStmt->fetch() ){ print "\$a1 is $a1\n&quo ...

  2. 一维和二维ST模板

    void init(){ ; i < n; i++) st[i][] = a[i]; ; ( << j) <= n; j++){ ; i + ( << j) - & ...

  3. C#如何定义一个变长的一维和二维数组

    1.假设将要定义数组的长度为程序执行过程中计算出来的MAX List<int> Arc = new List<int>(); ; i < MAX; i++) { Arc. ...

  4. np.unique()对一维和二维数组去重

    numpy.unique(ar, return_index=False, return_inverse=False, return_counts=False, axis=None)[source] 一 ...

  5. 51Nod1085 0-1背包(一维和二维数组实现)

    背包是典型的动态规划问题,关于背包问题的详解,推荐博客:点击打开链接(这篇博客有点错误,代码for循环里错了,不过讲解 的很详细) 题目如下: 在N件物品取出若干件放在容量为W的背包里,每件物品的体积 ...

  6. Piggy-Bank(多重背包+一维和二维通过方式)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1114 题面: Problem Description Before ACM can do anythi ...

  7. Graham算法—二维点集VC++实现

    一.凸包定义 通俗的说就是:一组平面上的点,求一个包含所有点的最小凸多边形,这个最小凸多边形就是凸包. 二.Graham算法思想 概要:Graham算法的主要思想就是,最终形成的凸包,即包围所有点的凸 ...

  8. 2017头条笔试题:二维点集中找出右上角没有点的点并按x坐标从小到大打印坐标

    PS:这篇是之前本来就想发的但是一直没时间写,加上今天做了京东的题,结果代码名就命名为jingdong了……懒得改代码名重新跑一遍结果了=.= 暴力法去做就是遍历每个点,判断它是不是“最大点”.判断过 ...

  9. 稳定排序nlogn之归并排序_一维,二维

    稳定排序nlogn之归并排序_一维,二维 稳定排序:排序时间稳定的排序 稳定排序包括:归并排序(nlogn),基数排序[设待排序列为n个记录,d个关键码,关键码的取值范围为radix,则进行链式基数排 ...

随机推荐

  1. Spring整合Junit框架进行单元测试Demo

    一.开发环境 eclipse版本:4.6.1 maven版本:3.3.3 junit版本:4.12 spring版本:4.1.5.RELEASE JDK版本:1.8.0_111 二.项目结构 图 三. ...

  2. go 语言优势

    一:为什么用Go来做抽奖系统 1.Go  vs PHP/JAVA ①:高并发,Go协程优于PHP多进程,JAVA多线程模式 ②:高并发,编译后的二进制优于PHP解释型,JAVA虚拟机 3:高效网络模型 ...

  3. 美团 CodeM 复赛」城市网络

    美团 CodeM 复赛」城市网络 内存限制:64 MiB时间限制:500 ms标准输入输出 题目描述 有一个树状的城市网络(即 nnn 个城市由 n−1n-1n−1 条道路连接的连通图),首都为 11 ...

  4. Master Nginx(8) - Troubleshooting Techniques

    Analyzing log files Error log file formats Error log file entry examples Configuring advanced loggin ...

  5. SIM900A 发送AT+CSTT 总是 返回Error的原因分析

    检查 模块的供电是否正常 本例 修改供电后 联网恢复正常.

  6. 64位CentOS6.5下Eclipse用Java连接mysql

    1.到官网上下载jdbc驱动,我下载的是mysql-connector-java-5.0.8.tar.gz 2.解压下载到的文件 tar -zxvf mysql-connector-java-5.0. ...

  7. asciiflow

    http://asciiflow.com/ https://maxiang.io/# http://www.jianshu.com/p/19432b5e3c60

  8. oracle 内部机制-DTRACE

    Oracle SQL Tuning and CBO Internals: Based Optimizer with CBO Internals and SQL Tuning Optimization ...

  9. 怎样使用ListView实现一个带有网络请求,解析,分页,缓存的公共的List页面来大大的提高工作效率

    在寻常的开发中常常会有非常多列表页面.每做一个列表页就须要创建这个布局文件那个Adapter适配器文件等等一大堆与之相关的附属的不必要的冗余文件. 假设版本号更新迭代比較频繁,如此以往,就会使项目pr ...

  10. postgresql数据库psql控制台操作命令

    登录postgresql数据库控制台 psql 数据库名 登录成功显示 [zpf@kevin ~]$ psql postgres psql (9.4.1) Type "help" ...