- 1、本文档共45页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
AFORGE 图像处理手势识别
?/hellogv/article/details/5555689基于Aforge的手势识别之二~~~单点手势识别分类:?/hellogv/article/category/683095计算机视觉2010-05-04 13:46?9058人阅读?/hellogv/article/details/5555689评论(12)?javascript:void(0);收藏?/hellogv/article/details/5555689举报/tag/imageimage/tag/processingprocessing/tag/%e5%9b%be%e5%bd%a2图形/tag/objectobject/tag/cc本文来自/hellogv/ ,引用必须注明出处! 本文把/hellogv/archive/2010/04/25/5526284.aspxAforge的运动识别与/hellogv/archive/2010/05/04/5554691.aspx前面介绍的手写识别融合在一起,实现单个手指的手势识别。下图演示了本文代码运行的结果,图片有点大,请稍候。。。 我预先让程序学习了B和C这两个字母,然后通过手指的手势识别向程序绘画图形,所以点击recorgize时,就自动把图形的特征对应的字母给识别出来了。 这个例子关键部分在于如何灵活运用Aforge的运动识别,如何判断是要画图,还是普通的移来移去呢?在这里,我判断移动对象的大小,当突然面积增大(即两个指套合并)则开始绘图(手势识别的开始),当拆开再合并则为解除绘图(手势识别的结束),说白了就是用一个当前状态=!当前状态去做。?本文的代码可以到这里下载:/source/2313846/source/2313846?下面贴出运动判断的核心代码:[c-sharp]?/hellogv/article/details/5555689view plain/hellogv/article/details/5555689copy/hellogv/article/details/5555689print/hellogv/article/details/5555689?private?void?videoSourcePlayer1_NewFrame(?object?sender,?ref?Bitmap?image?)??{???nowImg?=?(Bitmap)image.Clone();????Bitmap?objectImage?=?colorFilter.Apply(?image?);????//?lock?image?for?further?processing??BitmapData?objectData?=?objectImage.LockBits(?new?Rectangle(?0,?0,?image.Width,?image.Height?),???ImageLockMode.ReadOnly,?image.PixelFormat?);????//?grayscaling??UnmanagedImage?grayImage?=?grayFilter.Apply(?new?UnmanagedImage(?objectData?)?);????//?unlock?image??objectImage.UnlockBits(?objectData?);????//?locate?blobs???blobCounter1.ProcessImage(?grayImage?);???ListRectangle?rects?=?new?ListRectangle();???rects.AddRange(blobCounter1.GetObjectsRectangles());????if?(?rects.Count?0?)???{???#region?去掉内部和黏在一起的对象??for?(int?i?=?0;?i??rects.Count?-?1;?i++)???{???//true表示X轴上不能相交,false表示相交??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);???//true表示Y轴上不能相交,false表示相交??Boolean?isNoTouchY?=?Math.Max(rects[i?+?1].Bottom,?rects[i].Bottom)?-?Math.Min(rects[i?+?1].Top,?rects[i].Top)??(re
文档评论(0)