QQ登录

只需一步,快速开始

131上位机VC MFC实现识别手写数字功能

[ 复制链接 ]

131上位机VC MFC实现识别手写数字功能

131上位机VC MFC实现识别手写数字功能
131上位机VC MFC实现识别手写数字功能
功能展示
触摸屏手机基本都带手写输入功能,手写功能的实现感觉十分的高大上,我们当前例程就来实现识别手写数字功能,了解下实现手写功能的大概原理,效果如图;
要点提示
手写文字的识别可以通过模板匹配的方法,也可以记录笔划顺序进行识别的方法,方法很多,我们当前例程简单的记录用户手写文字时的笔划顺序,再对比实现数字的笔划顺序进行识别数字;
实现功能
1.新建基于对话框的应用程序
2.拖拽一图片控件用作输入面板,修改ID为IDC_PANEL,类型为矩形,关联变量Cstatic m_Panel;
拖拽一编辑框ID为IDC_EDIT1,用于显示识别结果;
拖拽一按钮关联函数OnButton2()用于执行识别功能;
添加些变量用于记录手写过程的信息  private:CPen    m_ThickPen;     //用粗画笔写数字
CPoint  m_PrePoint;//之前的坐标点 Digit  m_Figure; //数字对象
int m_CurPens; //当前笔数
3.添加鼠标点击,移动,放开的函数及识别用的自定义函数Recognize() 下面来函数体
  1. void CGkbc8Dlg::OnLButtonUp(UINT nFlags, CPoint point)
  2. {m_CurPens ++; CDialog::OnLButtonUp(nFlags, point);}
  3. void CGkbc8Dlg::OnLButtonDown(UINT nFlags, CPoint point)
  4. {
  5.         m_PrePoint = point;
  6.         CRect rc;
  7.         m_Panel.GetClientRect(rc);
  8.         if(rc.PtInRect(point))
  9.                 m_Figure.DotCount += 1;
  10.         CDialog::OnLButtonDown(nFlags, point);
  11. }
复制代码
  1. void CGkbc8Dlg::OnMouseMove(UINT nFlags, CPoint point)
  2. {
  3.         CRect rc;
  4.         m_Panel.GetClientRect(rc);
  5.         if(nFlags&MK_LBUTTON && rc.PtInRect(point)) //如果鼠标左键按着写字时
  6.                 {
  7.                         CDC* pDC = m_Panel.GetDC();
  8.                         pDC->SelectObject(&m_ThickPen);
  9.                         pDC->MoveTo(point);
  10.                         pDC->LineTo(CPoint(point.x+1,point.y+1));
  11.                         
  12.                         if (m_CurPens>15)
  13.                                 return;
  14.                         if (point.x>m_PrePoint.x+30) //向右
  15.                         {
  16.                                 if (m_Figure.Direction[m_CurPens]==none)
  17.                                         m_Figure.Direction[m_CurPens] = right;
  18.                                 else if (m_Figure.Direction[m_CurPens] != right)
  19.                                 {
  20.                                         m_CurPens+=1;
  21.                                         m_Figure.Direction[m_CurPens] = right;               
  22.                                 }
  23.                                 m_PrePoint = point;
  24.                         }
  25.                         else if (point.y>m_PrePoint.y+30)
  26.                         {
  27.                                 if (m_Figure.Direction[m_CurPens]==none)
  28.                                         m_Figure.Direction[m_CurPens] = down;
  29.                                 else if (m_Figure.Direction[m_CurPens] != down)
  30.                                 {
  31.                                         m_CurPens+=1;
  32.                                         m_Figure.Direction[m_CurPens] = down;               
  33.                                 }
  34.                                 m_PrePoint = point;
  35.                         }
复制代码
  1. else if (point.x<m_PrePoint.x-30)
  2.                         {
  3.                                 if (m_Figure.Direction[m_CurPens]==none)
  4.                                         m_Figure.Direction[m_CurPens] = left;
  5.                                 else if (m_Figure.Direction[m_CurPens] != left)
  6.                                 {
  7.                                         m_CurPens+=1;
  8.                                         m_Figure.Direction[m_CurPens] = left;                                                
  9.                                 }
  10.                                 m_PrePoint = point;
  11.                         }
  12.                         else if (point.y< m_PrePoint.y-30)
  13.                         {
  14.                                 if (m_Figure.Direction[m_CurPens]==none)
  15.                                         m_Figure.Direction[m_CurPens]= up;
  16.                                 else if (m_Figure.Direction[m_CurPens] != up)
  17.                                 {
  18.                                         m_CurPens+=1;
  19.                                         m_Figure.Direction[m_CurPens] = up;                                                
  20.                                 }
  21.                                 m_PrePoint = point;
  22.                         }        
  23.                 }        
  24.         CDialog::OnMouseMove(nFlags, point);
  25. }
复制代码
最后用按钮调用自定义的函数Recognize();实现识别数字功能

我们来演示下功能实现的整个过程
请点击此处下载

请先注册会员后在进行下载

已注册会员,请先登录后下载

文件名称:131.上位机VC MFC实现识别手写数字功能.rar 
文件大小:142.15 KB  售价:10金币
下载权限: 不限 以上或 VIP会员   [购买捐助会员]   [充值积分]   有问题联系我

  

您的支持是我们创作的动力!  

  

您可花点闲钱积分自助任意充值

  

成为VIP会员 全站资源任意下载永久更新!




回复

使用道具 举报

快速回复 返回列表 客服中心 搜索