OpenCV学习4-----K-Nearest Neighbors(KNN)demo
最近用到KNN方法,学习一下OpenCV给出的demo。
demo大意是随机生成两团二维空间中的点,然后在500*500的二维空间平面上,计算每一个点属于哪一个类,然后用红色和绿色显示出来每一个点
如下是一系demo里用到的相关函数。
运行效果:
红色背景应该是表示每一个像素的类别标签和红色的点的标签相同。同理,绿色背景表示绿色的像素与绿色的点是同一个类的。
demo.cpp:
#include "ml.h"
#include "highgui.h" int main( int argc, char** argv )
{
const int K = ;
int i, j, k, accuracy;
float response;
int train_sample_count = ;
CvRNG rng_state = cvRNG(-);
CvMat* trainData = cvCreateMat( train_sample_count, , CV_32FC1 );
CvMat* trainClasses = cvCreateMat( train_sample_count, , CV_32FC1 );
IplImage* img = cvCreateImage( cvSize( , ), , );
float _sample[];
CvMat sample = cvMat( , , CV_32FC1, _sample );
cvZero( img ); CvMat trainData1, trainData2, trainClasses1, trainClasses2; // form the training samples
cvGetRows( trainData, &trainData1, , train_sample_count/ );
cvRandArr( &rng_state, &trainData1, CV_RAND_NORMAL, cvScalar(,), cvScalar(,) ); cvGetRows( trainData, &trainData2, train_sample_count/, train_sample_count );
cvRandArr( &rng_state, &trainData2, CV_RAND_NORMAL, cvScalar(,), cvScalar(,) ); cvGetRows( trainClasses, &trainClasses1, , train_sample_count/ );
cvSet( &trainClasses1, cvScalar() ); cvGetRows( trainClasses, &trainClasses2, train_sample_count/, train_sample_count );
cvSet( &trainClasses2, cvScalar() ); // learn classifier
CvKNearest knn( trainData, trainClasses, , false, K );
CvMat* nearests = cvCreateMat( , K, CV_32FC1); for( i = ; i < img->height; i++ )
{
for( j = ; j < img->width; j++ )
{
sample.data.fl[] = (float)j;
sample.data.fl[] = (float)i; // estimate the response and get the neighbors' labels
response = knn.find_nearest(&sample,K,,,nearests,); // compute the number of neighbors representing the majority
for( k = , accuracy = ; k < K; k++ )
{
if( nearests->data.fl[k] == response)
accuracy++;
}
// highlight the pixel depending on the accuracy (or confidence)
cvSet2D( img, i, j, response == ?
(accuracy > ? CV_RGB(,,) : CV_RGB(,,)) :
(accuracy > ? CV_RGB(,,) : CV_RGB(,,)) );
}
} // display the original training samples
for( i = ; i < train_sample_count/; i++ )
{
CvPoint pt;
pt.x = cvRound(trainData1.data.fl[i*]);
pt.y = cvRound(trainData1.data.fl[i*+]);
cvCircle( img, pt, , CV_RGB(,,), CV_FILLED );
pt.x = cvRound(trainData2.data.fl[i*]);
pt.y = cvRound(trainData2.data.fl[i*+]);
cvCircle( img, pt, , CV_RGB(,,), CV_FILLED );
} cvNamedWindow( "classifier result", );
cvShowImage( "classifier result", img );
cvWaitKey(); cvReleaseMat( &trainClasses );
cvReleaseMat( &trainData );
return ;
}
参考:
https://docs.opencv.org/2.4/modules/ml/doc/k_nearest_neighbors.html
OpenCV学习4-----K-Nearest Neighbors(KNN)demo的更多相关文章
- [机器学习系列] k-近邻算法(K–nearest neighbors)
C++ with Machine Learning -K–nearest neighbors 我本想写C++与人工智能,但是转念一想,人工智能范围太大了,我根本介绍不完也没能力介绍完,所以还是取了他的 ...
- 转载: scikit-learn学习之K最近邻算法(KNN)
版权声明:<—— 本文为作者呕心沥血打造,若要转载,请注明出处@http://blog.csdn.net/gamer_gyt <—— 目录(?)[+] ================== ...
- <机器学习实战>读书笔记--k邻近算法KNN
k邻近算法的伪代码: 对未知类别属性的数据集中的每个点一次执行以下操作: (1)计算已知类别数据集中的点与当前点之间的距离: (2)按照距离递增次序排列 (3)选取与当前点距离最小的k个点 (4)确定 ...
- 学习笔记之k-nearest neighbors algorithm (k-NN)
k-nearest neighbors algorithm - Wikipedia https://en.wikipedia.org/wiki/K-nearest_neighbors_algorith ...
- K NEAREST NEIGHBOR 算法(knn)
K Nearest Neighbor算法又叫KNN算法,这个算法是机器学习里面一个比较经典的算法, 总体来说KNN算法是相对比较容易理解的算法.其中的K表示最接近自己的K个数据样本.KNN算法和K-M ...
- OpenCV 学习笔记 06 图像检索以及基于图像描述符的搜索
OpenCV 可以检测图像的主要特征,然后提取这些特征,使其成为图像描述符,这些图像特征可作为图像搜索的数据库:此外可以利用关键点将图像拼接 stitch 起来,组成一个更大的图像.如将各照片组成一个 ...
- K近邻法(KNN)原理小结
K近邻法(k-nearst neighbors,KNN)是一种很基本的机器学习方法了,在我们平常的生活中也会不自主的应用.比如,我们判断一个人的人品,只需要观察他来往最密切的几个人的人品好坏就可以得出 ...
- 机器学习--K近邻 (KNN)算法的原理及优缺点
一.KNN算法原理 K近邻法(k-nearst neighbors,KNN)是一种很基本的机器学习方法. 它的基本思想是: 在训练集中数据和标签已知的情况下,输入测试数据,将测试数据的特征与训练集中对 ...
- (转) OpenCV学习笔记大集锦 与 图像视觉博客资源2之MIT斯坦福CMU
首页 视界智尚 算法技术 每日技术 来打我呀 注册 OpenCV学习笔记大集锦 整理了我所了解的有关OpenCV的学习笔记.原理分析.使用例程等相关的博文.排序不分先后,随机整理的 ...
- OpenCV学习笔记(27)KAZE 算法原理与源码分析(一)非线性扩散滤波
http://blog.csdn.net/chenyusiyuan/article/details/8710462 OpenCV学习笔记(27)KAZE 算法原理与源码分析(一)非线性扩散滤波 201 ...
随机推荐
- redux和react-redux的使用详解
我自己的理解redux就跟vue中的vuex差不多,都是数据管理器,话不多说,我们从经典的计数器案例开始讲解 使用redux实现计数器 创建如下的react项目,我习惯把每一个模块分块,才有这么多文件 ...
- 在vue-cli + webpack 项目中使用sass
1.准备工作: 由于npm的服务器在国外,网速慢而且安装容易失败,建议在安装之前,先安装国内的镜像,比如淘宝镜像 npm install -g cnpm --registry=https://regi ...
- 解决MacOS升级后出现xcrun: error: invalid active developer path, missing xcrun的问题
升级了系统 命令行不能用了 xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools), mis ...
- 【转载】 旧版本Microsoft Office正在配置解决方法
原文:https://blog.csdn.net/sinat_37215184/article/details/81053931 在运行Microsoft Office 2010等旧版本的Office ...
- [转]Visual C++ 和 C++ 有什么区别?
注:本篇内容转载与网络,方便自己学习,如有侵权请您联系我删除,谢谢. 有位同学问我“Visual C++和C++有什么区别?”,这的确是初学者会感到困惑的问题,比较常见.除此之外,还有“先学C++好, ...
- notpad++ 搭配 gcc
notpad++ 搭配 gcc GCC 是 GNU 编译器套装的简称(GNU Compiler Collection),一套编程语言编译器,以 GPL 及 LGPL 许可证所发行的自由软件,也是 GN ...
- Java设计模式(16)——行为模式之模板方法模式(Template)
一.概念 概念 UML简图 角色 使用场景 其实我们常用得抽象类就是这个模式得运用,所以基本上属于比较好理解的一种模式. 二.实践 根据上述角色,给出相应代码 抽象模板 /** * 抽象模板 * * ...
- 20145209刘一阳《网络对抗》Exp2 后门原理与实践
20145209刘一阳<网络对抗>Exp2 后门原理与实践 基础问题回答 1.例举你能想到的一个后门进入到你系统中的可能方式? •在网上下载软件的时候,后门很有可能被捆绑在下载的软件当中: ...
- 北京Uber优步司机奖励政策(12月13日)
滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...
- nio之netty3的应用
1.netty3是nio的封装版本.在使用上面比nio的直接使用更好.nio简单使用都是单线程的方式(比如:一个服务员服务很多客户),但是netty3的方式不一样的是,引入线程池的方式来实现服务的通信 ...