单个手指的手势识别

本文来自http://blog.csdn.net/hellogv/ ,引用必须注明出处!

       本文把Aforge的运动识别与前面介绍的手写识别融合在一起,实现单个手指的手势识别。下图演示了本文代码运行的结果,图片有点大,请稍候。。。

 

       我预先让程序学习了B和C这两个字母,然后通过手指的手势识别向程序绘画图形,所以点击recorgize时,就自动把图形的特征对应的字母给识别出来了。

      这个例子关键部分在于如何灵活运用Aforge的运动识别,如何判断是要画图,还是普通的移来移去呢?在这里,我判断移动对象的大小,当突然面积增大(即两个指套合并)则开始绘图(手势识别的开始),当拆开再合并则为解除绘图(手势识别的结束),说白了就是用一个当前状态=!当前状态去做。

      本文的代码可以到这里下载:http://download.csdn.net/source/2313846

      下面贴出运动判断的核心代码:

[c-sharp] view plaincopyprint?
  1. privatevoid videoSourcePlayer1_NewFrame( object sender, ref Bitmap image ) 
  2.     nowImg = (Bitmap)image.Clone(); 
  3.  
  4.     Bitmap objectImage = colorFilter.Apply( image ); 
  5.  
  6.     // lock image for further processing  
  7.     BitmapData objectData = objectImage.LockBits( new Rectangle( 0, 0, image.Width, image.Height ), 
  8.         ImageLockMode.ReadOnly, image.PixelFormat ); 
  9.  
  10.     // grayscaling  
  11.     UnmanagedImage grayImage = grayFilter.Apply( new UnmanagedImage( objectData ) ); 
  12.  
  13.     // unlock image  
  14.     objectImage.UnlockBits( objectData ); 
  15.  
  16.     // locate blobs   
  17.     blobCounter1.ProcessImage( grayImage ); 
  18.     List<Rectangle> rects = new List<Rectangle>(); 
  19.     rects.AddRange(blobCounter1.GetObjectsRectangles()); 
  20.  
  21.     if ( rects.Count >0 ) 
  22.     {
  23.         #region 去掉内部和黏在一起的对象  
  24.         for (int i = 0; i < rects.Count - 1; i++) 
  25.         { 
  26.             //true表示X轴上不能相交,false表示相交  
  27.             Boolean isNoTouchX = Math.Max(rects[i + 1].Right , rects[i].Right) - Math.Min(rects[i + 1].Left ,rects[i].Left) > (rects[i].Width + rects[i + 1].Width); 
  28.             //true表示Y轴上不能相交,false表示相交  
  29. Boolean isNoTouchY = Math.Max(rects[i + 1].Bottom, rects[i].Bottom) - Math.Min(rects[i + 1].Top, rects[i].Top) > (rects[i].Height + rects[i + 1].Height);
  30.             if (isNoTouchX == false && isNoTouchY == false)//如果两个对象相交  
  31.             { 
  32.                 Rectangle rect = new Rectangle(Math.Min(rects[i].Left, rects[i + 1].Left), 
  33.                     Math.Min(rects[i].Top, rects[i + 1].Top), 
  34.                     Math.Max(rects[i].Right, rects[i + 1].Right) - Math.Min(rects[i].Left, rects[i + 1].Left), 
  35.                     Math.Max(rects[i].Bottom, rects[i + 1].Bottom) - Math.Min(rects[i].Top, rects[i + 1].Top)); 
  36.                 rects.RemoveAt(i + 1); 
  37.                 rects.RemoveAt(i); 
  38.  
  39.                 rects.Add(rect); 
  40.                 i = 0; 
  41.             } 
  42.         }
  43.         #endregion
  44.         #region 画出表示点  
  45.         Rectangle objectRect = rects[0]; 
  46.  
  47.         int oldSize=oldRect.Width+oldRect.Height; 
  48.         int nowSize=rects[0].Width+rects[0].Height; 
  49.  
  50.         if (nowSize > (oldSize * 1.2))//如果突然变大,即两个指套合并  
  51.         { 
  52.             isCapture =!isCapture; 
  53.             clsHandWrite.Clear(); 
  54.         } 
  55.  
  56.         Graphics g = Graphics.FromImage(image); 
  57.  
  58.         if (isCapture)//如果捕捉到对象  
  59.         { 
  60.             Pen pen = new Pen(Color.FromArgb(255, 0, 0), 3); 
  61.             g.DrawRectangle(pen, objectRect); 
  62.             int x = (objectRect.Left + objectRect.Width / 2) * pbDraw.Width / videoSourcePlayer1.Width; 
  63.             int y = (objectRect.Top + objectRect.Height / 2) * pbDraw.Height / videoSourcePlayer1.Height; 
  64.                     clsHandWrite.Draw(x,y ); 
  65.         } 
  66.         else//如果没有捕捉到对象  
  67.         { 
  68.             Pen pen = new Pen(Color.FromArgb(160, 255, 160), 3); 
  69.             g.DrawRectangle(pen, objectRect); 
  70.         } 
  71.  
  72.         g.Dispose();
  73.    
  74.         #endregion  
  75.  
  76.         oldRect = rects[0]; 
  77.          
  78.     } 
  79.  
  80.     UpdateObjectPicture(objectImage ); 
  81.      

转载于:https://www.cnblogs.com/tiandile/archive/2013/03/12/2956375.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/494258.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Apifox:满足你对 Api 的所有幻想

文章目录⌚️ 一、Api 管理的难点在哪&#xff1f;&#x1f4f1; 二、Apifox 是什么&#xff1f;&#x1f4bf; 三、接口设计 (接口文档)⌨️ 3.1 接口文档&#x1f4bb; 3.2 快速上手&#x1f5a8; 3.3 接口路径&#x1f4bd; 四、团队管理&#x1f4fd; 4.1 权限管理⏱ 4.2 项…

百度地图综合

本文主要包括百度地图API的综合应用&#xff0c;主要内容如下 地图图层展示&#xff0c;包括热力图与实时路况图 添加覆盖物&#xff0c;包括图片&#xff0c;文字&#xff0c;折线等地图控制&#xff0c;包括俯视&#xff0c;旋转&#xff0c;放大&#xff0c;缩小等定位&…

国内Api行业,可以内卷到什么程度?

随着移动应用以及智能设备爆发增长&#xff0c;同时越来越多的零售商、媒体、政府和金融服务公司开始公开Web API&#xff0c;API的使用越来越多。 现在&#xff0c;每日API调用量在不断飙升&#xff0c;早在2009年&#xff0c;Facebook每天API调用量就已经达到了50亿。如何能…

自动驾驶关键技术报告:惯性导航和背后的芯片大战

来源&#xff1a;智东西摘要&#xff1a;惯性导航将成为自动驾驶定位信息融合的中心。惯性导航系统由于具有的输出信息不间断、不受外界干扰的独特优势&#xff1b;同时可以将多种传感器的信息以及车身信息进行更深层次的融合&#xff0c;为决策层提供精确可靠的连续的车辆位置…

3D打印产业化机遇与挑战

来源&#xff1a;3D科学谷3D打印的突出特点有两个&#xff1a;免除模具以及制造成本对设计的复杂性不敏感。免除模具的特点使得3D打印适合用于产品原型、试制零件、备品备件、个性化定制、零件修复、医疗植入物、医疗导板、牙科产品、耳机产品等小批量个性化的产品。而传统制造…

Android之ExpandableListView

ExpandableListView可以用来表现多层级的listView&#xff0c;本文主要是ExpandableListView的一个简单实现 布局文件 <LinearLayout xmlns:android"http://schemas.android.com/apk/res/android"xmlns:tools"http://schemas.android.com/tools"andro…

Api -- 连接世界的Super Star

文章目录&#x1f34f; 一、api 的定义&#xff1a;数据共享模式定义 4 大种类&#x1f356; 二、api 使用场景&#xff1a;互联网时代&#xff0c;api 无处不在2.1 sql 查询2.2 数据传输&#x1f364; 三、开放 api&#xff08;OpenAPI&#xff09;&#xff1a;开放双赢&#…

2018全球最强物联网公司揭晓!

来源&#xff1a;数字化企业根据Gartner预测&#xff0c; 到2020年将有超过200亿台联网设备&#xff0c;市场价值将达3000亿美元之巨。随着垂直应用上的不断细分&#xff0c;以及与AI的加速整合&#xff0c;物联网不仅将持续地变革人们的生活和工作&#xff0c;市场规模也将持续…

Android之解析GML并显示

本例主要实现在APP中解析GML数据并显示 GML,地理标记语言&#xff08;外语全称&#xff1a;Geography MarkupLanguage、外语缩写&#xff1a;GML&#xff09;&#xff0c;它由开放式地理信息系统协会&#xff08;外语缩写&#xff1a;OGC&#xff09;于1999年提出&#xff0c;…

中国电子学会发布《新一代人工智能领域十大最具成长性技术展望(2018-2019年)》...

来源&#xff1a;中国电子学会当前&#xff0c;全球正在经历科技和产业高度耦合、深度迭加的新一轮变革&#xff0c;大数据的形成、理论算法的革新、计算能力的提升及网络设施的演进驱动人工智能进入新一轮创新发展高峰期&#xff0c;新技术持续获得突破性进展&#xff0c;呈现…

晓得不,中间表是这样被消灭的

目录 一、中间表的产生 1、一步算不出来 2、实时计算等待时间过长 3、多样性数据源参加计算 4、中间表难以删除 二、文件计算 三、高性能文件格式 四、易管理性 五、多数据源支持 六、集成性 七、资料 一、中间表的产生 中间表是数据库中专门存放中间计算结果的数据…

美国五大科技巨头的人工智能竞赛

来源&#xff1a;资本实验室毫无疑问&#xff0c;人工智能已经开始渗透到各行各业&#xff0c;并正在改变我们的工作方式和生活方式。2017年&#xff0c;全球与人工智能相关的资金投入总额达到152亿美元&#xff0c;比上一年增加144&#xff05;。而无论在投资&#xff0c;还是…

模拟Struts2实现

本文主要是一个模拟的Struts2的简单实现 真正的MVC架构 实现主要思路 定义一个过滤器&#xff0c;接收传递过去的Action&#xff0c;根据处理的结果重定向或者转发。 首先定义index.jsp <% page language"java" import"java.util.*" pageEncoding&q…

实战教学--怎样提高报表呈现的性能?

报表的性能很重要&#xff0c;是一个总被谈及的问题&#xff0c;跑的慢的报表用户体验恶劣&#xff0c;无法忍受。解决这些慢的性能问题&#xff0c;也成了项目方和工程师头疼的事情。一出状况&#xff0c;就得安排技术好的&#xff0c;能力强的工程师去救火&#xff0c;本来利…

WiFi共享精灵 - 不需路由器一键轻松把网线共享给手机、笔记本等同时无线上网...

现在人们身边手机、游戏机等各种使用WiFi上网的设备已经越来越多&#xff0c;但经常遇到一些地方只有有线网络&#xff0c;或者没有无线路由器的情况&#xff0c;这时&#xff0c;用笔记本上网&#xff0c;然后把网络通过WiFi共享给其他设备上网那么就最合适了。我们之前有介绍…

干货|李开复最新刷屏演讲:人工智能最难取代这13种工作,也最容易威胁人性与爱!...

来源&#xff1a;澎湃新闻这两年&#xff0c;创新工场董事长兼首席执行官李开复&#xff0c;一直为人工智能站台和奔走&#xff0c;还出新书帮助人们规划未来的AI生活。他预言&#xff0c;中国有望在全球范围内首先实现OMO&#xff08;Online-Merge-Offline&#xff0c;线上线下…

Apifox vs Eolink,国内 Api 工具哪家强?

目前行业内有 postman、jmeter 为代表开源 Api 工具派系&#xff0c;我想对大家对这两个词并不陌生。虽然它们能解决基本的接口测试&#xff0c;但是无法解决接口链路上的所有问题&#xff0c;一个工具难以支持整个过程。 在国内&#xff0c;我们可以看到有国产 API 管理工具&…

人工智能、区块链、混合现实:2019年新闻、媒体与技术趋势

来源&#xff1a;资本实验室近日&#xff0c;未来今日研究所&#xff08;Future Today Institute&#xff09;发布了《2019年新闻、媒体与技术趋势报告》&#xff0c;报告提出了涵盖多个领域的108个新兴技术趋势。报告显示&#xff0c;未来的新闻、媒体等行业将受到各种技术错综…

活久见:都 2203 年了,你还在使用 word 调试 API

随着信息技术的发展&#xff0c;API 变得无处不在&#xff0c;无处不用。但令人费解的是&#xff0c;都 2203 年了&#xff0c;竟然还有很多人使用 word 调试 API&#xff1f; 今天&#xff0c;西红柿将带领大家打开新世界的大门&#xff0c;放下诺基亚&#xff0c;抄起智能机&…

Struts2基础知识

本文主要包括以下内容 struts2常用常量的定义与意义struts2处理流程拆分struts动态方法调用,使用通配符接收请求参数中文编码问题自定义类型转化器访问或添加request/session/application常用servlet对象的获取 struts2常用常量的定义与意义 struts2处理流程 每一次请求都会创…