opencv实现KNN手写数字的识别
2016-04-01 19:02
816 查看
人工智能是当下很热门的话题,手写识别是一个典型的应用。为了进一步了解这个领域,我阅读了大量的论文,并借助opencv完成了对28x28的数字图片(预处理后的二值图像)的识别任务。
预处理一张图片:
首先采用opencv读取图片的构造函数读取灰度的图片,再采用大津法求出图片的二值化的阈值,并且将图片二值化。
train
训练结果如下,准确率还是很令人满意的。
预处理一张图片:
首先采用opencv读取图片的构造函数读取灰度的图片,再采用大津法求出图片的二值化的阈值,并且将图片二值化。
void knnTrain() { #ifdef SAVETRAINED //knn training; samples.clear(); dat_mat = Mat::zeros(10 * nImgNum, 324, CV_32FC1); res_mat = Mat::zeros(10 * nImgNum, 1, CV_32FC1); for (int i = 0; i != 10; i++) { getFile(dirNames[i], i); } preTrain(); cout << "------ Training finished. -----" << endl << endl; knn.train(dat_mat, res_mat, Mat(), false, 2); #ifdef SAVEASXML knn.save("./trained/knnTrained.xml"); #endif #else knn.load("./trained/knnTrained.xml"); #endif //knn test cout << endl << "--- KNN test mode : ---" << endl; int tCnt = 10000; int tAc = 0; selfknnTest(tCnt, tAc); cout << endl << endl << "Total number of test samples : " << tCnt << endl; cout << "Accuracy : " << float(float(tAc) / float(tCnt)) * 100 << "%" << endl; }
train
训练结果如下,准确率还是很令人满意的。
相关文章推荐
- linux文件系统的移植
- 关于网站优化
- 秒杀系统架构分析与实战
- mac下安装tomcat
- OpenGL入门博文精选
- 每天一个linux命令(50):crontab命令
- zabbix 监控 Resin
- linux磁盘管理
- GDB程序调试工具参考知识
- Linux GDB程序调试工具使用简介
- App工程结构搭建:几种常见Android代码架构分析
- Android 应用架构概述
- Tsar的监控使用
- Linux中的软链接与硬链接
- centos7安装postgresql和pgadmin
- linux中php配置
- Linux rpm 命令参数使用详解[介绍和应用]
- 网站htaccess配置
- 认识与学习bash
- RunLoop基础