Exemple #1
0
 /// <summary>
 /// Show calibration area
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="e"></param>
 private void btnShowSampleArea_Click(object sender, EventArgs e)
 {
     if (this.ImageMat != null)
     {
         Rectangle sampleArea1, sampleArea2;
         sampleArea1    = new Rectangle(this.pbxImage.Image.Width / 2, this.pbxImage.Image.Height / 2, 50, 50);
         sampleArea2    = new Rectangle(this.pbxImage.Image.Width / 2, this.pbxImage.Image.Height / 3, 50, 50);
         this.ImageMat  = SkinDetector.DrawSkinColorSampler(this.ImageMat, sampleArea1, sampleArea2);
         pbxImage.Image = this.ImageMat.ToBitmap();
     }
 }
Exemple #2
0
        /// <summary>
        /// Calibrate skin mask and detect gesture
        /// </summary>
        /// <param name="img">Input Image</param>
        /// <param name="sampleArea1">Skin mask sample area 1</param>
        /// <param name="sampleArea2">Skin mask sample area 1</param>
        /// <returns>Image with debug information and detected gesture</returns>
        public static Mat GetGestureFromImage(Mat img, Rectangle sampleArea1, Rectangle sampleArea2)
        {
            SkinDetector  skinDetector  = new SkinDetector();
            FingerCounter fingerCounter = new FingerCounter();
            Gesture       gesture       = Gesture.None;

            if (img != null)
            {
                skinDetector.Calibrate(img, sampleArea1, sampleArea2);
                Mat skinMask = skinDetector.GetSkinMask(img);
                var newImage = fingerCounter.FindFingersCount(skinMask);
                img = newImage;
                switch (fingerCounter.NumberOfFingersRaised)
                {
                case 0:
                    gesture = Gesture.None;
                    break;

                case 1:
                    gesture = Gesture.Pointing;
                    break;

                case 2:
                    gesture = Gesture.Sign_2;
                    break;

                case 3:
                    gesture = Gesture.Sign_3;
                    break;

                case 4:
                    gesture = Gesture.Sign_4;
                    break;

                case 5:
                    gesture = Gesture.OpenHand;
                    break;

                default:
                    break;
                }
            }
            Console.WriteLine(gesture.ToString());
            CvInvoke.PutText(img, gesture.ToString(), new Point(50, 50), FontFace.HersheyComplex, 1, new Bgr(255, 255, 255).MCvScalar, 3);
            return(img);
        }