Esempio n. 1
0
        /// <summary>
        /// Handles all the drawing on the image
        /// </summary>
        /// <param name="p_imgData"></param>
        protected override void doWork(object p_imgData)
        {
            if (((ImageData)p_imgData).ConvexDefects != null)
            {
                List <Point>        convexHull    = ((ImageData)p_imgData).ConvexHull;
                List <Point>        contour       = ((ImageData)p_imgData).Contour;
                List <ConvexDefect> convexDefects = ((ImageData)p_imgData).ConvexDefects;
                List <Point>        fingerTips    = ((ImageData)p_imgData).FingerTips;
                MotionGestureProcessing.ImageData.Gestures gesture = ((ImageData)p_imgData).Gesture;

                byte[]     buffer;
                BitmapData data = BitmapManip.lockBitmap(out buffer, ((ImageData)p_imgData).Image);

                drawOrientation(data, buffer, ((ImageData)p_imgData).EigenVectors, ((ImageData)p_imgData).Center);
                drawLines(ref data, ref buffer, convexHull, Color.Yellow);
                drawLines(ref data, ref buffer, contour, Color.Blue);
                drawDefects(ref data, ref buffer, convexDefects, Color.Orange);
                drawFingers(ref data, ref buffer, fingerTips, 20, Color.Red);
                drawGesture(ref data, ref buffer, gesture);

                BitmapManip.unlockBitmap(ref buffer, ref data, ((ImageData)p_imgData).Image);

                ((ImageData)p_imgData).Image.Save("Final.jpg");
            }

            Processing.getInstance().ToReturnImage = (ImageData)p_imgData;
        }
Esempio n. 2
0
        /// <summary>
        /// Runs through some defaults for determining gesture
        /// </summary>
        /// <param name="p_convexDefects"></param>
        /// <param name="p_fingerTips"></param>
        /// <returns>Gesture represented</returns>
        private MotionGestureProcessing.ImageData.Gestures deriveGesture(ref List <ConvexDefect> p_convexDefects, ref List <Point> p_fingerTips)
        {
            int          max;
            ConvexDefect maxDefect;

            MotionGestureProcessing.ImageData.Gestures gesture = ImageData.Gestures.INITIALIZING;

            switch (p_convexDefects.Count)
            {
            case 0:
                gesture = ImageData.Gestures.CLICKANDHOLD;
                break;

            case 1:
                gesture = ImageData.Gestures.CLICKANDHOLD;
                break;

            case 2:
                gesture = ImageData.Gestures.DOUBLECLICK;
                break;

            case 3:
                if (m_thumbPos != 0)
                {
                    gesture = parse3Defect(ref p_convexDefects, ref p_fingerTips);
                }
                break;

            case 4:
                if (p_fingerTips.Count == 5 && m_thumbPos == 0)
                {
                    max       = (int)p_convexDefects.Max(x => x.Area);
                    maxDefect = p_convexDefects.Where(cd => (int)cd.Area == max).ToList().First();
                    if (maxDefect.Equals(p_convexDefects[0]))
                    {
                        m_thumbPos = -1;
                    }
                    else
                    {
                        m_thumbPos = 1;
                    }
                }
                gesture = ImageData.Gestures.MOVE;
                break;

            default:
                throw new Exception("more than 4 defects");
            }

            if (m_thumbPos == 0)
            {
                gesture = ImageData.Gestures.INITIALIZING;
            }

            return(gesture);
        }
Esempio n. 3
0
        /// <summary>
        /// This get the gesture of the hand
        /// </summary>
        /// <param name="p_imgData"></param>
        protected override async void doWork(Object p_imgData)
        {
            if (((ImageData)p_imgData).ConvexDefects != null)
            {
                MotionGestureProcessing.ImageData.Gestures gesture = ImageData.Gestures.INITIALIZING;

                List <ConvexDefect> convexDefects = ((ImageData)p_imgData).ConvexDefects;
                List <Point>        fingerTips    = ((ImageData)p_imgData).FingerTips;

                ((ImageData)p_imgData).Gesture = deriveGesture(ref convexDefects, ref fingerTips);
            }
            else
            {
                m_thumbPos = 0;
            }


            //writeGesture(gesture);
            Processing.getInstance().ToDrawingImage = (ImageData)p_imgData;
        }