Beispiel #1
0
        //find fingertip countour
        public Bitmap finger_tip(Bitmap otsut, int x_max, int x_min, int y_max, int y_min)
        {

            int count_pixel;
            int deger;
            int limit_first;
            int limit_second;
            int aralik;

            BitmapSettings otsus = new BitmapSettings(otsut);
            otsus.LockBits();
            for (int x = x_min; x <= x_max; x++)
            {
                count_pixel = 0;

                aralik = 1;
                limit_first = 0;
                limit_second = 0;


                for (int y = y_max; y >= y_min; y--)//aşagıdan yukarı tarama
                {
                    if (otsus.GetPixel(x, y) == Color.FromArgb(255, 255, 255))
                    {
                        limit_first = y;
                        break;
                    }

                }

                for (int y = y_min; y <= y_max; y++)//yukarıdan aşağı tarama
                {
                    if (otsus.GetPixel(x, y) == Color.FromArgb(255, 255, 255))
                    {
                        limit_second = y;
                        break;
                    }
                }

                count_pixel = (limit_first - limit_second) + 1;



                for (int y = limit_first; y >= limit_second; y--)
                {

                    deger = (int)Math.Round(aralik * (255 / (double)count_pixel));
                    otsus.SetPixel(x, y, Color.FromArgb(deger, deger, deger));

                    aralik++;
                }

            }


            for (int y = y_min; y <= y_max; y = y + 1)
            {
                for (int x = x_min; x <= x_max; x = x + 1)
                {
                    if (otsus.GetPixel(x, y).R != 255)
                    {
                        otsus.SetPixel(x, y, Color.FromArgb(0, 0, 0));

                    }

                }
            }
            otsus.UnlockBits();
            return otsut;
        }
Beispiel #2
0
        //find fingertip countour
        public Bitmap finger_tip(Bitmap otsut, int x_max, int x_min, int y_max, int y_min)
        {
            int count_pixel;
            int deger;
            int limit_first;
            int limit_second;
            int aralik;

            BitmapSettings otsus = new BitmapSettings(otsut);
            otsus.LockBits();
            for (int x = x_min; x <= x_max; x++)
            {
                count_pixel = 0;

                aralik = 1;
                limit_first = 0;
                limit_second = 0;

                for (int y = y_max; y >= y_min; y--)//aşagıdan yukarı tarama
                {
                    if (otsus.GetPixel(x, y) == Color.FromArgb(255, 255, 255))
                    {
                        limit_first = y;
                        break;
                    }

                }

                for (int y = y_min; y <= y_max; y++)//yukarıdan aşağı tarama
                {
                    if (otsus.GetPixel(x, y) == Color.FromArgb(255, 255, 255))
                    {
                        limit_second = y;
                        break;
                    }
                }

                count_pixel = (limit_first - limit_second) + 1;

                for (int y = limit_first; y >= limit_second; y--)
                {

                    deger = (int)Math.Round(aralik * (255 / (double)count_pixel));
                    otsus.SetPixel(x, y, Color.FromArgb(deger, deger, deger));

                    aralik++;
                }

            }

            for (int y = y_min; y <= y_max; y = y + 1)
            {
                for (int x = x_min; x <= x_max; x = x + 1)
                {
                    if (otsus.GetPixel(x, y).R != 255)
                    {
                        otsus.SetPixel(x, y, Color.FromArgb(0, 0, 0));

                    }

                }
            }
            otsus.UnlockBits();
            return otsut;
        }
Beispiel #3
0
        public int[] finger_degree(Bitmap otsu1,int [] parmak_x, int [] parmak_y,int x_max, int x_min, int y_max, int y_min)
        {
            int x;
            int y;
            int[] parmak_bölge = new int[5];
   

            for (int t = 360; t > 0; t = t - 1)
            {
                //////////
                x = (int)(x_min + ((x_max - x_min) / 2) + (Math.Cos(t) * ((x_max - x_min) /2-5)));//((x_max - x_min) /2)-10));
                y = (int)((y_max -(80) - Math.Abs(Math.Sin(t) * (x_max - x_min) / 3)));//değiştir
                ///////////////
            

                BitmapSettings otsu2 = new BitmapSettings(otsu1);
                otsu2.LockBits();
               
                if (y  > y_min) { otsu2.SetPixel(x, y, Color.Green); }
              
                if (y - 20 > y_min) { otsu2.SetPixel(x, y-30 , Color.Green); }
                              
               otsu2.UnlockBits();

                if (y_max - y_min <= 120) {//tamamen kapalı el
                    parmak_bölge[0] = 2;

                    parmak_bölge[1] = 2;

                    parmak_bölge[2] = 2;

                    parmak_bölge[3] = 2;

                    parmak_bölge[4] = 2;
                }


                if (parmak_y[0] == 1000) { parmak_bölge[0] = 2; }
                if (parmak_y[1] == 1000) { parmak_bölge[1] = 2; }
                if (parmak_y[2] == 1000) { parmak_bölge[2] = 2; }
                if (parmak_y[3] == 1000) { parmak_bölge[3] = 2; }
                if (parmak_y[4] == 1000) { parmak_bölge[4] = 2; }
             
                if (x == parmak_x[0])
                {

                     if ((parmak_y[0] >= y)) { parmak_bölge[0] = 2; }  //kapalı parmak
                    else if ((parmak_y[0] < y) && (parmak_y[0] >= y -40)) { parmak_bölge[0] = 1; }            
                    else if( parmak_y[0] < y - 40 ){ parmak_bölge[0] = 0; } // (açık parmak dereceyi 0 ile çarpacak motor dönmeyecek)
                }

                else if (x == parmak_x[1])
                {
                     if ((parmak_y[1] >= y)) { parmak_bölge[1] = 2; }  //kapalı parmak
                   else if ((parmak_y[1] < y) && (parmak_y[1] >= y - 40)) { parmak_bölge[1] = 1; }                 
                   else if ((parmak_y[1] < y - 40)) { parmak_bölge[1] = 0; } 
                }

                else if (x == parmak_x[2])
                {
                    
                 if ((parmak_y[2] >= y)) { parmak_bölge[2] = 2; }  //kapalı parmak
                   else if ((parmak_y[2] < y) && (parmak_y[2] >= y - 40)) { parmak_bölge[2] = 1; }
                   else if ((parmak_y[2] < y - 40)) { parmak_bölge[2] = 0; } 
                }

                else if (x == parmak_x[3])
                {
                     if ((parmak_y[3] >= y)) { parmak_bölge[3] = 2; }  //kapalı parmak
                   else if ((parmak_y[3] < y) && (parmak_y[3] >= y -40)) { parmak_bölge[3] = 1; }
                   else if ((parmak_y[3] < y - 40)) { parmak_bölge[3] = 0; } 
                }

                else if (x == parmak_x[4])
                {
                    if ((parmak_y[4] >= y)) { parmak_bölge[4] = 2; }  //kapalı parmak
                   else if ((parmak_y[4] < y) && (parmak_y[4] >= y - 40)) { parmak_bölge[4] = 1; }
                   else if ((parmak_y[4] < y - 40)) { parmak_bölge[4] = 0; } 
                }
            }


            return parmak_bölge;
            //çıkan değerleri dereceyle çarpıp motora gönder.  örn: parmak_bölge[0]*10; motor 10 un katlarıyla döner
        }
Beispiel #4
0
        public int[] finger_degree(Bitmap otsu1,int [] parmak_x, int [] parmak_y,int x_max, int x_min, int y_max, int y_min)
        {
            int x;
            int y;
            int[] parmak_bölge = new int[5];

            for (int t = 360; t > 0; t = t - 1)
            {
                //////////
                x = (int)(x_min + ((x_max - x_min) / 2) + (Math.Cos(t) * ((x_max - x_min) /2-5)));//((x_max - x_min) /2)-10));
                y = (int)((y_max -(80) - Math.Abs(Math.Sin(t) * (x_max - x_min) / 3)));//değiştir
                ///////////////

                BitmapSettings otsu2 = new BitmapSettings(otsu1);
                otsu2.LockBits();

                if (y  > y_min) { otsu2.SetPixel(x, y, Color.Green); }

                if (y - 20 > y_min) { otsu2.SetPixel(x, y-30 , Color.Green); }

               otsu2.UnlockBits();

                if (y_max - y_min <= 120) {//tamamen kapalı el
                    parmak_bölge[0] = 2;

                    parmak_bölge[1] = 2;

                    parmak_bölge[2] = 2;

                    parmak_bölge[3] = 2;

                    parmak_bölge[4] = 2;
                }

                if (parmak_y[0] == 1000) { parmak_bölge[0] = 2; }
                if (parmak_y[1] == 1000) { parmak_bölge[1] = 2; }
                if (parmak_y[2] == 1000) { parmak_bölge[2] = 2; }
                if (parmak_y[3] == 1000) { parmak_bölge[3] = 2; }
                if (parmak_y[4] == 1000) { parmak_bölge[4] = 2; }

                if (x == parmak_x[0])
                {

                     if ((parmak_y[0] >= y)) { parmak_bölge[0] = 2; }  //kapalı parmak
                    else if ((parmak_y[0] < y) && (parmak_y[0] >= y -40)) { parmak_bölge[0] = 1; }
                    else if( parmak_y[0] < y - 40 ){ parmak_bölge[0] = 0; } // (açık parmak dereceyi 0 ile çarpacak motor dönmeyecek)
                }

                else if (x == parmak_x[1])
                {
                     if ((parmak_y[1] >= y)) { parmak_bölge[1] = 2; }  //kapalı parmak
                   else if ((parmak_y[1] < y) && (parmak_y[1] >= y - 40)) { parmak_bölge[1] = 1; }
                   else if ((parmak_y[1] < y - 40)) { parmak_bölge[1] = 0; }
                }

                else if (x == parmak_x[2])
                {

                 if ((parmak_y[2] >= y)) { parmak_bölge[2] = 2; }  //kapalı parmak
                   else if ((parmak_y[2] < y) && (parmak_y[2] >= y - 40)) { parmak_bölge[2] = 1; }
                   else if ((parmak_y[2] < y - 40)) { parmak_bölge[2] = 0; }
                }

                else if (x == parmak_x[3])
                {
                     if ((parmak_y[3] >= y)) { parmak_bölge[3] = 2; }  //kapalı parmak
                   else if ((parmak_y[3] < y) && (parmak_y[3] >= y -40)) { parmak_bölge[3] = 1; }
                   else if ((parmak_y[3] < y - 40)) { parmak_bölge[3] = 0; }
                }

                else if (x == parmak_x[4])
                {
                    if ((parmak_y[4] >= y)) { parmak_bölge[4] = 2; }  //kapalı parmak
                   else if ((parmak_y[4] < y) && (parmak_y[4] >= y - 40)) { parmak_bölge[4] = 1; }
                   else if ((parmak_y[4] < y - 40)) { parmak_bölge[4] = 0; }
                }
            }

            return parmak_bölge;
            //çıkan değerleri dereceyle çarpıp motora gönder.  örn: parmak_bölge[0]*10; motor 10 un katlarıyla döner
        }