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手写体识别相关推荐

  1. libsvm Minist Hog 手写体识别

    统计手写数字集的HOG特征 转载请注明出处,楼燚(yì)航的blog,http://www.cnblogs.com/louyihang-loves-baiyan/ 这篇文章是模式识别的小作业,利用sv ...

  2. python模拟手写笔迹_pytorch实现MNIST手写体识别

    本文实例为大家分享了pytorch实现MNIST手写体识别的具体代码,供大家参考,具体内容如下 实验环境 pytorch 1.4 Windows 10 python 3.7 cuda 10.1(我笔记 ...

  3. TensorRT(3)-C++ API使用:mnist手写体识别

    本节将介绍如何使用tensorRT C++ API 进行网络模型创建. 1 使用C++ API 进行 tensorRT 模型创建 还是通过 tensorRT官方给的一个例程来学习. 还是mnist手写 ...

  4. TensorRT(2)-基本使用:mnist手写体识别

    结合 tensorRT官方给出的一个例程,介绍tensorRT的使用. 这个例程是mnist手写体识别.例程位于目录: /usr/src/tensorrt/samples/sampleMNIST 文件 ...

  5. 基于感知机的手写体识别

    对于手写体的识别,我采用的是keras来实现的,首先搭建一个单层感知机的模型来训练,来观察其模型的预测效果. 学习步骤如下: 源码: from keras.datasets import mnist ...

  6. Python3实现简单可学习的手写体识别

    0.目录 1.前言 2.通过pymssql与数据库的交互 3.通过pyqt与界面的交互 4.UI与数据库的交互 5.最后的main主函数 1.前言 版本:Python3.6.1 + PyQt5 + S ...

  7. [深度学习-实践]BP神经网络的Helloworld(手写体识别和Fashion_mnist)

    前言 原理部分请看这里 [深度学习-原理]BP神经网络 Tensorflow2 实现一个简单的识别衣服的例子 数据集Fashion_mnist, 此数据集包含10类型的衣服 ('T-shirt/top ...

  8. python神经网络案例——CNN卷积神经网络实现mnist手写体识别

    分享一个朋友的人工智能教程.零基础!通俗易懂!风趣幽默!还带黄段子!大家可以看看是否对自己有帮助:点击打开 全栈工程师开发手册 (作者:栾鹏) python教程全解 CNN卷积神经网络的理论教程参考 ...

  9. python神经网络案例——FC全连接神经网络实现mnist手写体识别

    全栈工程师开发手册 (作者:栾鹏) python教程全解 FC全连接神经网络的理论教程参考 http://blog.csdn.net/luanpeng825485697/article/details ...

最新文章

  1. 大数据新手的0基础学习路线,从菜鸟到高手的成长之路
  2. android实时声音信号波形_Android输出正弦波音频信号(左右声道对称)-阿里云开发者社区...
  3. 要打造一款稳定顺滑、火遍全球的游戏?云将成为你的坚实后盾
  4. 12篇文章带你逛遍主流分割网络
  5. Android利用soap WSDL与Webservice通信
  6. 朴素贝叶斯:拉普拉斯修正
  7. Nachos编译与使用--Nachos配置
  8. 简述x264几种码率控制方式的实现
  9. C++多线程03 Lambda表达式与caII once
  10. 5G版聚合路由器加速释放5G潜能
  11. 计算机xp怎么做备份,怎么备份电脑系统?XP环境使用Ghost备份操作系统的步骤
  12. English--基础知识点--6--非限制性定语从句
  13. arcgis农田图例_ArcGIS在高标准农田建设项目图件制作中的应用
  14. Python爬取分析动漫之家订阅量最多的漫画的标签
  15. 一个大型虚拟项目包含位于不同地点的许多干系人_PLAN8T ART 丨在虚拟维度的拼贴现实中,漫游,想象。...
  16. 计算机网络 自顶向下(5)链路层——学习笔记
  17. 1.Python基础-本地安装
  18. Web前端工程师常去的15个技术网站
  19. L1-021 重要的话说三遍 (5 分)
  20. 3.2 daydayup举一反三:三天打鱼两天晒网式学习

热门文章

  1. Python基础知识学习(六)——包与模块:指令、包加载步骤、搜索范围
  2. matlab2017b激活后打开报错License Manager Error -8
  3. redisTemplate 实现有序集合排序
  4. 混合正交表生成工具——allpairs安装及使用
  5. 旅游定制服务|基于SSM实现旅游个性化定制网站平台
  6. IMX系列设备树引脚复用解析
  7. 没有javaeye积分了,谁了解浙大网新恒天公司啊?
  8. 将微服务应用于物联网
  9. 传奇架设超详细图文教程——GOM引擎
  10. 双重差分模型python包_什么是双重差分模型(difference-in-differences model)?