openCvSharp4手写体识别
0、实验思路
(1)利用cv自带的图片digits.png,完成训练、手动切割出来的数字识别(本文完成);
(2)让上面的训练集合识别自己手写、经ps切割的单个数字图片;
(3)识别自己写的一行数字。
1、参考源
作者:十月ku
网址:OpenCVSharp4 识别物体系列之学习对象分类 - 简书
2、界面和思路
创建4个按钮,分别为切割并训练、识别内置、识别手写、识别一行手写
3、功能实现
(1)切割并训练,代码如下:
Mat img0 = Cv2.ImRead("digits.png", ImreadModes.Grayscale);Mat tTrainData = new Mat();Mat tTrainLabel = new Mat();int step = 20;//原图为1000*2000,每行2000/20=100个,共50行int rowsCount = img0.Rows / step; int colsCount = 90; //训练90,并把最后几个拿出来for (int i = 0; i < rowsCount; i++)//50行{int offsetRow = i * step; //行上的偏移量for (int j = 0; j < colsCount; j++) //列数{int offsetCol = j * step; //列上的偏移量Mat temp = img0.SubMat(offsetRow, offsetRow + step, offsetCol, offsetCol + step).Clone();temp=temp.Reshape(1,1);tTrainData.PushBack(temp);tTrainLabel.PushBack((int)(i / 5));}}tTrainData.ConvertTo(tTrainData, MatType.CV_32F);knn.Train(tTrainData, SampleTypes.RowSample, tTrainLabel);knn.Save("knn.xml");MessageBox.Show("ok");
(2)识别代码如下:
private void Button1_Click(object sender, RoutedEventArgs e){knn.Read(new FileStorage("knn.xml", FileStorage.Modes.Read).GetFirstTopLevelNode());Mat temp = Cv2.ImRead("t3.png", ImreadModes.Grayscale).Clone();temp = temp.Reshape(1,1);temp.ConvertTo(temp, MatType.CV_32F);float res_f=knn.Predict(temp);MessageBox.Show(res_f.ToString());}
问题:
输出为整数,有时候会出错;由于不能输出为某一个数值的概率数值,放弃KNN,在测试完我自己的手写体识别后,转其他机器学习阵营。
附KNN原理
KNN全称是k-Nearest Neighbors,意思是K个最近的邻居。
KNN算法从名字上我们就可以很直观地看出它的原理:从所有的训练样本中找出和未知最近的K个样本,将k个样本中出现最多的类别就是赋给未知样本。
典型的原理说明图如下
显然,如果参数k=3,三角形占了2/3,则输出三角形;k=5,正方形占了3/5,则认为是正方形。
从这里可以看出,分类应该就是整数,但各占多少,或者得到这个投票比值,需要看源代码。
另外,对于训练数据图片,训练前如果对图片进行锐化是否有影响?训练数据是否是自动阈值二值化的?上述问题都需要看源代码解决。
openCvSharp4手写体识别相关推荐
- libsvm Minist Hog 手写体识别
统计手写数字集的HOG特征 转载请注明出处,楼燚(yì)航的blog,http://www.cnblogs.com/louyihang-loves-baiyan/ 这篇文章是模式识别的小作业,利用sv ...
- python模拟手写笔迹_pytorch实现MNIST手写体识别
本文实例为大家分享了pytorch实现MNIST手写体识别的具体代码,供大家参考,具体内容如下 实验环境 pytorch 1.4 Windows 10 python 3.7 cuda 10.1(我笔记 ...
- TensorRT(3)-C++ API使用:mnist手写体识别
本节将介绍如何使用tensorRT C++ API 进行网络模型创建. 1 使用C++ API 进行 tensorRT 模型创建 还是通过 tensorRT官方给的一个例程来学习. 还是mnist手写 ...
- TensorRT(2)-基本使用:mnist手写体识别
结合 tensorRT官方给出的一个例程,介绍tensorRT的使用. 这个例程是mnist手写体识别.例程位于目录: /usr/src/tensorrt/samples/sampleMNIST 文件 ...
- 基于感知机的手写体识别
对于手写体的识别,我采用的是keras来实现的,首先搭建一个单层感知机的模型来训练,来观察其模型的预测效果. 学习步骤如下: 源码: from keras.datasets import mnist ...
- Python3实现简单可学习的手写体识别
0.目录 1.前言 2.通过pymssql与数据库的交互 3.通过pyqt与界面的交互 4.UI与数据库的交互 5.最后的main主函数 1.前言 版本:Python3.6.1 + PyQt5 + S ...
- [深度学习-实践]BP神经网络的Helloworld(手写体识别和Fashion_mnist)
前言 原理部分请看这里 [深度学习-原理]BP神经网络 Tensorflow2 实现一个简单的识别衣服的例子 数据集Fashion_mnist, 此数据集包含10类型的衣服 ('T-shirt/top ...
- python神经网络案例——CNN卷积神经网络实现mnist手写体识别
分享一个朋友的人工智能教程.零基础!通俗易懂!风趣幽默!还带黄段子!大家可以看看是否对自己有帮助:点击打开 全栈工程师开发手册 (作者:栾鹏) python教程全解 CNN卷积神经网络的理论教程参考 ...
- python神经网络案例——FC全连接神经网络实现mnist手写体识别
全栈工程师开发手册 (作者:栾鹏) python教程全解 FC全连接神经网络的理论教程参考 http://blog.csdn.net/luanpeng825485697/article/details ...
最新文章
- 大数据新手的0基础学习路线,从菜鸟到高手的成长之路
- android实时声音信号波形_Android输出正弦波音频信号(左右声道对称)-阿里云开发者社区...
- 要打造一款稳定顺滑、火遍全球的游戏?云将成为你的坚实后盾
- 12篇文章带你逛遍主流分割网络
- Android利用soap WSDL与Webservice通信
- 朴素贝叶斯:拉普拉斯修正
- Nachos编译与使用--Nachos配置
- 简述x264几种码率控制方式的实现
- C++多线程03 Lambda表达式与caII once
- 5G版聚合路由器加速释放5G潜能
- 计算机xp怎么做备份,怎么备份电脑系统?XP环境使用Ghost备份操作系统的步骤
- English--基础知识点--6--非限制性定语从句
- arcgis农田图例_ArcGIS在高标准农田建设项目图件制作中的应用
- Python爬取分析动漫之家订阅量最多的漫画的标签
- 一个大型虚拟项目包含位于不同地点的许多干系人_PLAN8T ART 丨在虚拟维度的拼贴现实中,漫游,想象。...
- 计算机网络 自顶向下(5)链路层——学习笔记
- 1.Python基础-本地安装
- Web前端工程师常去的15个技术网站
- L1-021 重要的话说三遍 (5 分)
- 3.2 daydayup举一反三:三天打鱼两天晒网式学习
热门文章
- Python基础知识学习(六)——包与模块:指令、包加载步骤、搜索范围
- matlab2017b激活后打开报错License Manager Error -8
- redisTemplate 实现有序集合排序
- 混合正交表生成工具——allpairs安装及使用
- 旅游定制服务|基于SSM实现旅游个性化定制网站平台
- IMX系列设备树引脚复用解析
- 没有javaeye积分了,谁了解浙大网新恒天公司啊?
- 将微服务应用于物联网
- 传奇架设超详细图文教程——GOM引擎
- 双重差分模型python包_什么是双重差分模型(difference-in-differences model)?