OpenCV: Kmeans的使用一维和二维点集
OpenCVKmeans算法默认使用了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的使用一维和二维点集的更多相关文章
- Mojo 返回一维和二维数组
		
这种情况不断的网数组@arr2里放入数据,返回的内容为: 这种情况是一维数组: while( $selStmt->fetch() ){ print "\$a1 is $a1\n&quo ...
 - 一维和二维ST模板
		
void init(){ ; i < n; i++) st[i][] = a[i]; ; ( << j) <= n; j++){ ; i + ( << j) - & ...
 - C#如何定义一个变长的一维和二维数组
		
1.假设将要定义数组的长度为程序执行过程中计算出来的MAX List<int> Arc = new List<int>(); ; i < MAX; i++) { Arc. ...
 - np.unique()对一维和二维数组去重
		
numpy.unique(ar, return_index=False, return_inverse=False, return_counts=False, axis=None)[source] 一 ...
 - 51Nod1085  0-1背包(一维和二维数组实现)
		
背包是典型的动态规划问题,关于背包问题的详解,推荐博客:点击打开链接(这篇博客有点错误,代码for循环里错了,不过讲解 的很详细) 题目如下: 在N件物品取出若干件放在容量为W的背包里,每件物品的体积 ...
 - Piggy-Bank(多重背包+一维和二维通过方式)
		
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1114 题面: Problem Description Before ACM can do anythi ...
 - Graham算法—二维点集VC++实现
		
一.凸包定义 通俗的说就是:一组平面上的点,求一个包含所有点的最小凸多边形,这个最小凸多边形就是凸包. 二.Graham算法思想 概要:Graham算法的主要思想就是,最终形成的凸包,即包围所有点的凸 ...
 - 2017头条笔试题:二维点集中找出右上角没有点的点并按x坐标从小到大打印坐标
		
PS:这篇是之前本来就想发的但是一直没时间写,加上今天做了京东的题,结果代码名就命名为jingdong了……懒得改代码名重新跑一遍结果了=.= 暴力法去做就是遍历每个点,判断它是不是“最大点”.判断过 ...
 - 稳定排序nlogn之归并排序_一维,二维
		
稳定排序nlogn之归并排序_一维,二维 稳定排序:排序时间稳定的排序 稳定排序包括:归并排序(nlogn),基数排序[设待排序列为n个记录,d个关键码,关键码的取值范围为radix,则进行链式基数排 ...
 
随机推荐
- Spring整合Junit框架进行单元测试Demo
			
一.开发环境 eclipse版本:4.6.1 maven版本:3.3.3 junit版本:4.12 spring版本:4.1.5.RELEASE JDK版本:1.8.0_111 二.项目结构 图 三. ...
 - go 语言优势
			
一:为什么用Go来做抽奖系统 1.Go vs PHP/JAVA ①:高并发,Go协程优于PHP多进程,JAVA多线程模式 ②:高并发,编译后的二进制优于PHP解释型,JAVA虚拟机 3:高效网络模型 ...
 - 美团 CodeM 复赛」城市网络
			
美团 CodeM 复赛」城市网络 内存限制:64 MiB时间限制:500 ms标准输入输出 题目描述 有一个树状的城市网络(即 nnn 个城市由 n−1n-1n−1 条道路连接的连通图),首都为 11 ...
 - Master Nginx(8) - Troubleshooting Techniques
			
Analyzing log files Error log file formats Error log file entry examples Configuring advanced loggin ...
 - SIM900A  发送AT+CSTT 总是 返回Error的原因分析
			
检查 模块的供电是否正常 本例 修改供电后 联网恢复正常.
 - 64位CentOS6.5下Eclipse用Java连接mysql
			
1.到官网上下载jdbc驱动,我下载的是mysql-connector-java-5.0.8.tar.gz 2.解压下载到的文件 tar -zxvf mysql-connector-java-5.0. ...
 - asciiflow
			
http://asciiflow.com/ https://maxiang.io/# http://www.jianshu.com/p/19432b5e3c60
 - oracle 内部机制-DTRACE
			
Oracle SQL Tuning and CBO Internals: Based Optimizer with CBO Internals and SQL Tuning Optimization ...
 - 怎样使用ListView实现一个带有网络请求,解析,分页,缓存的公共的List页面来大大的提高工作效率
			
在寻常的开发中常常会有非常多列表页面.每做一个列表页就须要创建这个布局文件那个Adapter适配器文件等等一大堆与之相关的附属的不必要的冗余文件. 假设版本号更新迭代比較频繁,如此以往,就会使项目pr ...
 - postgresql数据库psql控制台操作命令
			
登录postgresql数据库控制台 psql 数据库名 登录成功显示 [zpf@kevin ~]$ psql postgres psql (9.4.1) Type "help" ...