基於Aforge的手勢識別之一~~~簡單的手寫識別

2023-10-12 00:58

本文主要是介绍基於Aforge的手勢識別之一~~~簡單的手寫識別,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

本文來自http://blog.csdn.net/hellogv/ ,引用必須注明出處!

     上一篇文章介紹了如何用Aforge去捕捉運動物體,現在就介紹一個更深入的操作----手勢識別。
      我實現手勢識別的原理很簡單:捕捉運動物體+手寫識別,把運動的物體的軌跡記錄下來,然後通過手寫識別引擎去搜索數據中最匹配的數據,從而知道「寫」的是什麼。目前常見的開源手寫識別引擎有zinnia,wagomu 這些,不過小弟我比較業余,只把網上的比較常見的手寫識別代碼改進一下,只能識別字母和數字,真想通過攝像頭隔空「手寫」的朋友就要多花時間玩玩上面提到的幾個開源手寫類庫了。

      本文介紹的手寫識別:先在一個固定大小的畫板上,用鼠標畫下某圖形,輸入該圖形對應的字母,程序把畫板上的字母特征點都保存下來特征數據庫(相當於學習記憶),然後再在畫板上畫出類似該字母的圖形,程序就通過新畫的特征點搜索特征數據庫從而找出最類似的字母。

接下來貼出核心代碼,詳細的代碼請到這裡下載:http://download.csdn.net/source/2312865

GetBMPContext()是把畫板中的圖形的特征分析出來,Learn()是把特征與特定的字母/數字對應起來保存到數據庫,Recognise()是把當前畫板的圖形特征從數據庫中搜索,從而找出對應的字母/數字。

[c-sharp]  view plain copy print ?
  1. const int SCAN_GAP = 10;  
  2. private String GetBMPContext(Bitmap bmp)  
  3. {  
  4.     Boolean bool1stScan = true;  
  5.     int ax = 0, ay = 0, bx = 0, by = 0;  
  6.     String result = "";  
  7.     for (int i = 1; i < bmp.Width; i = i + SCAN_GAP)  
  8.     {  
  9.         for (int j = 1; j < bmp.Height; j = j + SCAN_GAP)  
  10.         {  
  11.             if (bmp.GetPixel(i, j).ToArgb() == Color.Black.ToArgb())  
  12.             {  
  13.                 if (bool1stScan == false)  
  14.                 {  
  15.                     if (i <= ax) ax = i;  
  16.                     if (i >= bx) bx = i;  
  17.                     if (j <= ay) ay = j;  
  18.                     if (j >= by) by = j;  
  19.                 }  
  20.                 else  
  21.                 {  
  22.                     bool1stScan = false;  
  23.                     ax = i;  
  24.                     bx = i;  
  25.                     ay = j;  
  26.                     by = j;  
  27.                 }  
  28.             }  
  29.         }  
  30.     }  
  31.   
  32.     Bitmap bmp2 = new Bitmap(20, 20);  
  33.     Graphics g2 = Graphics.FromImage((Image)bmp2);  
  34.     g2.Clear(Color.White);  
  35.     g2.DrawImage(bmp, new Rectangle(0, 0, bmp2.Width, bmp2.Height),  
  36.         new Rectangle(0, 0, bmp.Width, bmp.Height), GraphicsUnit.Pixel);  
  37.     g2.Dispose();  
  38.     //            pictureBox1.Image = bmp2;  
  39.   
  40.     int a = 0, b = 0;  
  41.     for (int i = 0; i < bmp2.Width; i++)  
  42.     {  
  43.         for (int j = 0; j < bmp2.Height; j++)  
  44.         {  
  45.             if (bmp2.GetPixel(i, j).ToArgb() == Color.Black.ToArgb())  
  46.                 result = result + "0";  
  47.             else  
  48.                 result = result + "1";  
  49.         }  
  50.     }  
  51.     return result;  
  52. }  
  53.   
  54. public void Learn(String name)  
  55. {  
  56.     StreamWriter sw = new StreamWriter(fileName, true);  
  57.     sw.WriteLine(name + " " + GetBMPContext(bmpDraw));  
  58.     sw.Close();  
  59. }  
  60.   
  61. public String Recognise()  
  62. {  
  63.     String current = GetBMPContext(bmpDraw);  
  64.     StreamReader sr = new StreamReader(fileName);  
  65.     int max = 0;  
  66.     String result = "";  
  67.     while (sr.EndOfStream == false)  
  68.     {  
  69.         String[] key = sr.ReadLine().Split(' ');  
  70.         String name = key[0];  
  71.         String data = key[1];  
  72.         int match = 0;  
  73.   
  74.         for (int i = 0; i < current.Length; i++)  
  75.         {  
  76.             if (current[i] == data[i])  
  77.                 match++;  
  78.         }  
  79.         if (match >= max)  
  80.         {  
  81.             result = name;  
  82.             max = match;  
  83.         }  
  84.         //Trace.WriteLine(result + ":" + match + "," + max);  
  85.     }  
  86.     sr.Close();  
  87.   
  88.     return result;  
  89. }  

这篇关于基於Aforge的手勢識別之一~~~簡單的手寫識別的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/192093

相关文章

QT開篇——一個簡單的文本查看器

打算趁着假期這幾天用QT寫一個簡單的計算器。所以便開始動手學習QT。所以這篇文章是我邊摸索邊寫的。其中肯定會有不對的地方。所以如果有哪位看我的博客的話,歡迎之出來錯誤。大家共同進步。 QT是一套跨平臺的應用程序開發框架,貌似遊戲爐石傳說就是用這個做出來的。 其實它和微軟年久失修的MFC都是MVC軟件設計模式的一種實現。至於MVC軟件設計模式,作爲一個剛入門的程序員我也說不清,我也說不了。大概意

Aforge 关于摄像头亮度、对比度等参数设置

Dim csVideoCaptureDevice As VideoCaptureDevice'声明一个相机csVideoCaptureDevice = VideoPlayer2.VideoSource'视频播放csVideoCaptureDevice.DisplayPropertyPage(IntPtr.Zero)'这是焦点

AForge.NET介绍

AForge.NET是一个功能强大的开源计算机视觉库,它主要提供了以下功能: 图像处理(AForge.Imaging): 提供了一系列预定义的图像滤波器,包括模糊、锐化、边缘检测等。 支持色彩空间转换和像素操作,方便进行图像分析和识别。 提供了缩放、旋转、过滤等基本图像变换操作。 支持特征检测,如边缘检测、角点检测等。 提供了图像统计功能,如RGB通道统计、直方图计算等。 支持图像分割、图像合并

Swit轉場動畫的簡單分析

首先, 我們得了解什麼是轉場動畫.  1. 轉場動畫即是對一個view呈現和關閉時所做的動畫, 叫轉場動畫.  動畫是如何做出來的呢? 一. 了解CALayer與CGContext和UIView之間的關係 1. 以前我們學習UIView的時候, 應該知道, 當創建一個UIView的時候,系統會默認將UIView的LayerClass設置為layer類型.那麼什麼是layer呢?  -1.

AForge.NET是啥

AForge.NET是一个专门为开发者和研究者基于C#框架设计的开源项目。这个框架提供了不同的类库和关于类库的资源,还有很多应用程序例子,涵盖了计算机视觉与人工智能、图像处理、神经网络、遗传算法、机器学习、模糊系统、机器人控制等多个领域。 AForge.NET的主要架构由一系列的类库组成,包括AForge.Imaging(用于图像处理和过滤器)、AForge.Vision(计算机视觉应用类库)、A

好的設計:易于擴展且能夠保持簡單、健壯

好的設計:易于擴展且能夠保持簡單、健壯。

GCC簡單介紹

GCC簡單介紹 GCC 编译器在编译一个C语言程序时需要经过以下 4 步: 将C语言源程序预处理,生成.i文件。预处理后的.i文件编译成为汇编语言,生成.s文件。将汇编语言文件经过汇编,生成目标文件.o文件。将各个模块的.o文件链接起来生成一个可执行程序文件。 GCC查看版本 gcc 与 g++ 分别是 gnu 的 c & c++ 编译器. 在命令行提示符后键入$ cc --version

c++做存檔(很簡單)

今天來教怎麼做存檔 要加頭文件 #include<windows.h>#include<time.h>#include<conio.h>  認識個新函數: ifstream(輸入) and ofstream(保存) ifstream 隨便名字(“文件夾名字.類型”); 隨便名字>>變量(讀入) ofstream 隨便名字(“文件夾名字.類型”); 隨便名字<<變量(保存) 隨

用 aforge.net 小试一下验证码识别

今天来小玩一下 aforge.net 套用官方的话就是一个专门为开发者和研究者基于C#框架设计的,这个框架提供了不同的类库和关于类库的资源,还有很多应用程序例子,包括计算机视觉与人工智能,图像处理,神经网络,遗传算法,机器学习,机器人等领域,下载网址:http://www.aforgenet.com/framework/downloads.html 对了,不知道有多少公司是用得仕卡作为员工的福利

用 aforge.net 小试一下验证码识别

今天来小玩一下 aforge.net 套用官方的话就是一个专门为开发者和研究者基于C#框架设计的,这个框架提供了不同的类库和关于类库的资源,还有很多应用程序例子,包括计算机视觉与人工智能,图像处理,神经网络,遗传算法,机器学习,机器人等领域,下载网址:http://www.aforgenet.com/framework/downloads.html 对了,不知道有多少公司是用得仕卡作为员工的福利