KMeans方法概述
. 无监督学习方法
. 分类问题,输入分类数目,初始化中心位置
. 硬分类方法,以距离度量
. 迭代分类为聚类

  

//----------
//迭代算法的终止准则
//----------
TermCriteria(
  int type,
     //type=TermCriteria::MAX_ITER/TermCriteria::COUNT 迭代到最大迭代次数终止
  //type= TermCriteria::EPS 迭代到阈值终止
  //type= TermCriteria::MAX_ITER+ TermCriteria::EPS 上述两者都作为迭代终止条件
  int maxCount, //迭代的最大次数
  double epsilon // 阈值(中心位移值)
);
//----------
//按照给定的类别数目对样本集合进行聚类
//----------
void cvKMeans2(
  const CvArr* samples,   //输入样本的浮点矩阵,每个样本一行。
  int cluster_count,     //所给定的聚类数目
  CvArr* labels,       //输出整数向量:每个样本对应的类别标识
  CvTermCriteria termcrit  //指定聚类的最大迭代次数和/或精度(两次迭代引起的聚类中心的移动距离)
)

#include <opencv2/opencv.hpp>
#include <iostream> using namespace cv;
using namespace std; int main(int argc, char** argv) {
Mat img(, , CV_8UC3);
RNG rng(); //scalar是将图像设置成单一灰度和颜色
Scalar colorTab[] = {
Scalar(, , ),
Scalar(, , ),
Scalar(, , ),
Scalar(, , ),
Scalar(, , )
}; //分类个数
int numCluster = rng.uniform(, );
printf("number of clusters : %d\n", numCluster); //取10-100个随机样本
int sampleCount = rng.uniform(, );
//每一列至少两个数
Mat points(sampleCount, , CV_32FC2);
Mat labels;
Mat centers; // 生成随机数
for (int k = ; k < numCluster; k++) {
Point center;
center.x = rng.uniform(, img.cols);
center.y = rng.uniform(, img.rows);
//行,给随机点
Mat pointChunk = points.rowRange(k*sampleCount/numCluster, k == numCluster - ? sampleCount : (k + )*sampleCount / numCluster); //用随机数填充矩阵
rng.fill(pointChunk, RNG::NORMAL, Scalar(center.x, center.y), Scalar(img.cols*0.05, img.rows*0.05));
}
//算法打乱元素排列顺序
randShuffle(points, , &rng); // 使用KMeans
kmeans(points, numCluster, labels, TermCriteria(TermCriteria::EPS + TermCriteria::COUNT, , 0.1/*最小值*/), /*次数*/, KMEANS_PP_CENTERS, centers); // 用不同颜色显示分类
//初始化图片颜色。
img = Scalar::all();
for (int i = ; i < sampleCount; i++) {
int index = labels.at<int>(i);
//获取ponint点
Point p = points.at<Point2f>(i);
//填充
circle(img, p, , colorTab[index], -, );
} // 每个聚类的中心来绘制圆
for (int i = ; i < centers.rows; i++) {
int x = centers.at<float>(i, );
int y = centers.at<float>(i, );
printf("c.x= %d, c.y=%d", x, y);
circle(img, Point(x, y), , colorTab[i], , LINE_AA);
} imshow("KMeans-Data-Demo", img);
waitKey();
return ;
}

opencv::KMeans方法概述的更多相关文章

  1. Lua 调用 Opencv 的方法

    Lua 调用 Opencv 的方法 最近想用 Lua 调用 Opencv 进行相关像素级操作,如:bitwise_and 或者 bitwise_or,从而完成图像 IoU 的计算. 那么,怎么用 Lu ...

  2. paip.函数式编程方法概述以及总结

    paip.函数式编程方法概述以及总结 1     函数式编程:函数式风格..很多命令式语言里支持函数式编程风格 1.1      起源 (图灵机,Lisp机器, 神经网络计算机) 1.2      函 ...

  3. DBA_Oracle性能优化的基本方法概述(方法论)

    2014-12-18 Created By BaoXinjian

  4. OpenCV视频播放方法

    OpenCV视频播放方法 今天折腾了一下OpenCV的视频播放功能,希望能对项目又帮助- 代码还是非常easy的,仅仅是之前遇到点小麻烦,找不到cvCreateFileCapture函数的定义,花了一 ...

  5. javacpp-opencv图像处理3:使用opencv原生方法遍历摄像头设备及调用(增加实时帧率计算方法)

    javaCV图像处理系列: javaCV图像处理之1:实时视频添加文字水印并截取视频图像保存成图片,实现文字水印的字体.位置.大小.粗度.翻转.平滑等操作 javaCV图像处理之2:实时视频添加图片水 ...

  6. 循环语句(for,while,do……while),方法概述

    循环结构 分类:for,while,do……while (1)for语句 格式: for(初始化表达式:条件表达式:循环后的操作表达式){ 循环体: } 执行流程: a.执行初始化语句 b.执行判断条 ...

  7. 使用Spring Security3的四种方法概述

    使用Spring Security3的四种方法概述 那么在Spring Security3的使用中,有4种方法: 一种是全部利用配置文件,将用户.权限.资源(url)硬编码在xml文件中,已经实现过, ...

  8. Python 使用k-means方法将列表中相似的句子聚为一类

    由于今年暑假在学习一些自然语言处理的东西,发现网上对k-means的讲解不是很清楚,网上大多数代码只是将聚类结果以图片的形式呈现,而不是将聚类的结果表示出来,一下代码将老师给的代码和网上的代码结合了一 ...

  9. opencv kmeans 图像分割

    利用kmeans算法,将彩色图像的像素点作为样本,rgb值作为样本的属性, 对图像所有的像素点进行分类,从而实现对图像中目标的分割. c++代码(openCV 2.4.11) Scalar color ...

随机推荐

  1. linux下搭建jenkins

    为了配合上一篇的ant+jenkins做持续集成,需要在linux环境下搭建一个jenkins平台.网上有很多安装的例子,我主要记录一下自己遇到的问题,真真的是特别惆怅的,每次我遇到的问题都格外多. ...

  2. SqlServer中用@@IDENTITY取最新ID不准的问题

    最近遇到了一个SqlServer中用@@IDENTITY取最新ID不准的问题,经过在网上的一番查找,找到了如下资料,略作记录:"一个网友问我一个关于@@IDENTITY的问题.他的数据库中有 ...

  3. linux环境下的Oracle部署

    一.  环境及相关软件 虚拟机:VMwore Workstation Linux系统:CentOS ORACLE:ORACLE_112030_Linux-x86-64 Xmanger软件 二.  安装 ...

  4. layer重复弹出(layui弹层同时存在多个)的解决方法

    layer.open() 同时存在多个;解决 layui 弹层 layer 同时存在多个页面层(iframe)的问题 这个问题其实是疏忽了一些 基础参数(仔细看文档,仔细看文档,仔细看文档) 一.ty ...

  5. 爬虫---Beautiful Soup 初始

    我们在工作中,都会听说过爬虫,那么什么是爬虫呢? 什么是网络爬虫 爬虫基本原理 所谓网络爬虫就是一个自动化数据采集工具,你只要告诉它要采集哪些数据,丢给它一个 URL,就能自动地抓取数据了.其背后的基 ...

  6. Java学习笔记(1)--- 简介

    简介: 注:和之前的C不一样,本人没有学过java,所以内容上可能会相对详细一些. 主要特性: 1.这跟c++一样是面对对象语言: Java语言提供类.接口和继承等面向对象的特性,为了简单起见,只支持 ...

  7. 7. Go语言—时间模块

    一.时间模块 1. 统计程序执行时间 package main import ( "time" "fmt" ) func test() { time.Sleep ...

  8. Html学习之七(CSS选择器的使用--基础选择器优先级问题)

    二.基础选择器的综合使用 优先级顺序:id选择器>class选择器>元素选择器.也就是说,如果这三种选择器同时为某一个元素设定样式,那么冲突的部分按优先级的顺序依次决定. <!DOC ...

  9. ubuntu建立文件或者文件夹软链接

    文件夹建立软链接(用绝对地址) ln -s 源地址  目的地址 比如我把linux文件系统rootfs_dir软链接到/home/jyg/目录下 ln -s /opt/linux/rootfs_dir ...

  10. angular和ionic4对过滤器pipe的使用

    以下为自定义过滤器 import { Pipe, PipeTransform, Injectable } from '@angular/core'; import { DomSanitizer} fr ...