基于Aforge的手势识别之二 单点手势识别

               

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

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

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

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

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

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

        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 );            List<Rectangle> rects = new List<Rectangle>();            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) > (rects[i].Height + rects[i + 1].Height);                    if (isNoTouchX == false && isNoTouchY == false)//如果两个对象相交                    {                        Rectangle rect = new Rectangle(Math.Min(rects[i].Left, rects[i + 1].Left),                            Math.Min(rects[i].Top, rects[i + 1].Top),                            Math.Max(rects[i].Right, rects[i + 1].Right) - Math.Min(rects[i].Left, rects[i + 1].Left),                            Math.Max(rects[i].Bottom, rects[i + 1].Bottom) - Math.Min(rects[i].Top, rects[i + 1].Top));                        rects.RemoveAt(i + 1);                        rects.RemoveAt(i);                        rects.Add(rect);                        i = 0;                    }                }                #endregion                #region 画出表示点                Rectangle objectRect = rects[0];                int oldSize=oldRect.Width+oldRect.Height;                int nowSize=rects[0].Width+rects[0].Height;                if (nowSize > (oldSize * 1.2))//如果突然变大,即两个指套合并                {                    isCapture =!isCapture;                    clsHandWrite.Clear();                }                Graphics g = Graphics.FromImage(image);                if (isCapture)//如果捕捉到对象                {                    Pen pen = new Pen(Color.FromArgb(255, 0, 0), 3);                    g.DrawRectangle(pen, objectRect);                    int x = (objectRect.Left + objectRect.Width / 2) * pbDraw.Width / videoSourcePlayer1.Width;                    int y = (objectRect.Top + objectRect.Height / 2) * pbDraw.Height / videoSourcePlayer1.Height;                            clsHandWrite.Draw(x,y );                }                else//如果没有捕捉到对象                {                    Pen pen = new Pen(Color.FromArgb(160, 255, 160), 3);                    g.DrawRectangle(pen, objectRect);                }                g.Dispose();                            #endregion                oldRect = rects[0];                            }            UpdateObjectPicture(objectImage );                    }

           

再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow

### 回答1: 基于aforge的图像识别程序是一种利用计算机视觉技术实现的自动图像识别应用程序,它采用了aforge人工智能框架来对图像进行处理和分析,从而能够自动识别出图像中的目标物体、人脸、文字等信息,具有广泛的应用价值。 基于aforge的图像识别程序的工作原理是:先将待识别的图像进行预处理,如裁剪、缩放、去噪等操作,使其符合算法处理的要求。然后,根据不同的需求选用不同的算法进行图像分析和处理,如特征点检测、颜色分析、形状匹配等。最终,将分析得到的结果与预先设置的策略进行比对,确定目标物体的位置、尺寸和属性等信息。 基于aforge的图像识别程序可以应用于各种领域,如工业自动化、智能监控、医学影像分析等。例如,在工业生产中,可以用于检测产品的缺陷、质量问题等;在智能监控中,可以用于识别行人、车辆等信息,实现基于视觉的安防措施;在医学影像分析中,可以用于识别医学图像中的病变、器官等信息,提升医疗诊断的准确性。 总之,基于aforge的图像识别程序是一种十分有前景和潜力的应用程序,能够运用先进的计算机视觉技术实现自动化的图像识别,为现代化社会的进步和发展贡献巨大。 ### 回答2: 基于aforge库的图像识别程序可用于在图像、视频或摄像头实时流中识别物体、人脸、文字等。 该程序的主要流程为:首先加载所需的aforge库,然后打开要识别的图像或视频文件,对其进行归一化、分割等处理操作。接着将处理后的图像通过训练好的算法进行特征提取和分类,从而确定图像中是否存在所需识别的物体、人脸等。 对于物体识别,通常使用SIFT或SURF算法进行特征提取;人脸识别则使用Haar-cascade或基于深度学习的卷积神经网络(CNN)等算法。 在实际使用中,使用者可以根据实际需求调整参数,提高图像的识别准确度,例如改变图像的亮度、对比度、尺寸等,或更改特征提取算法的参数。 总之,基于aforge的图像识别程序可以广泛应用于安防监控、智能家居、无人驾驶、医疗影像等各种领域,为人们的生活和工作提供更便捷、高效的解决方案。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值