public void Left() {// soldan tarama BitmapSettings bmps = new BitmapSettings(bmp1); bmps.LockBits(); for (int x = 1; x < bmp1.Width - 1; x++) { for (int y = 0; y < bmp1.Height; y++) { lock (_LOCK) { if (bmps.GetPixel(x, y) == Color.FromArgb(255, 255, 255)) { LeftHis[x] += 1; } } } if (LeftHis[x] > setoff_x && LeftHis[x - 1] <= setoff_x) { Koordinat[1] = x; //x_min } } bmps.UnlockBits(); if (LeftHis[2] >= setoff_bilek) /* bilek fonksiyonunu çağır*/ Koordinat {
//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; }
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 }
public int[] FingersFind(Bitmap otsu, int x_max, int x_min, int y_max, int y_min)//parmak uçları olan bitmap { int[] parmak_xy = new int[10];//5 olacak Array.Clear(parmak_xy, 0, parmak_xy.Length); BitmapSettings otsus = new BitmapSettings(otsu); otsus.LockBits(); int dizi_boyutu = Math.Abs(x_max - x_min); int[] beyazPiksel_Y = new int[dizi_boyutu + 10]; int[] beyazPiksel_X = new int[dizi_boyutu + 10]; int t = 0; for (int x = x_min; x < x_max; x++) { for (int y = y_min; y < y_max; y++) { if (otsus.GetPixel(x, y).R == 255) { if(t<beyazPiksel_Y.Length){ beyazPiksel_Y[t] = y; beyazPiksel_X[t] = x; //otsus.SetPixel(x, y, Color.Blue); t++; } } for (int p = 0; p < beyazPiksel_Y.Length; p++) { if (beyazPiksel_Y[p] == 0) { beyazPiksel_Y[p] = 1000; beyazPiksel_X[p] = 1000; } } } } beyazPiksel_Y[0] = 1000; beyazPiksel_X[0] = 1000; beyazPiksel_Y[1] = 1000; beyazPiksel_X[1] = 1000; parmak_xy[0] = beyazPiksel_Y.Min(); parmak_xy[5] = beyazPiksel_X[beyazPiksel_Y.ToList().IndexOf(beyazPiksel_Y.Min())]; int d = 25; int s = beyazPiksel_Y.ToList().IndexOf(beyazPiksel_Y.Min()); for (int n = s -d; n < s + d; n++) { if (n > 0 && n < beyazPiksel_Y.Length) { beyazPiksel_Y[n] = 1000; beyazPiksel_X[n] = 1000; } } parmak_xy[1] = beyazPiksel_Y.Min(); //y parmak_xy[6] = beyazPiksel_X[beyazPiksel_Y.ToList().IndexOf(beyazPiksel_Y.Min())];//x s = beyazPiksel_Y.ToList().IndexOf(beyazPiksel_Y.Min()); for (int n = s - d; n < s + d; n++) { if (n > 0 && n < beyazPiksel_Y.Length) { beyazPiksel_Y[n] = 1000; beyazPiksel_X[n] = 1000; } } parmak_xy[2] = beyazPiksel_Y.Min(); parmak_xy[7] = beyazPiksel_X[beyazPiksel_Y.ToList().IndexOf(beyazPiksel_Y.Min())]; s = beyazPiksel_Y.ToList().IndexOf(beyazPiksel_Y.Min()); for (int n = s - d; n < s + d; n++) { if (n > 0 && n < beyazPiksel_Y.Length) { beyazPiksel_Y[n] = 1000; beyazPiksel_X[n] = 1000; } } parmak_xy[3] = beyazPiksel_Y.Min(); parmak_xy[8] = beyazPiksel_X[beyazPiksel_Y.ToList().IndexOf(beyazPiksel_Y.Min())]; s = beyazPiksel_Y.ToList().IndexOf(beyazPiksel_Y.Min()); for (int n = s - d; n < s + d; n++) { if (n > 0 && n < beyazPiksel_Y.Length) { beyazPiksel_Y[n] = 1000; beyazPiksel_X[n] = 1000; } } parmak_xy[4] = beyazPiksel_Y.Min(); parmak_xy[9] = beyazPiksel_X[beyazPiksel_Y.ToList().IndexOf(beyazPiksel_Y.Min())]; s = beyazPiksel_Y.ToList().IndexOf(beyazPiksel_Y.Min()); for (int n = s - d; n < s + d; n++) { if (n > 0 && n < beyazPiksel_Y.Length) { beyazPiksel_Y[n] = 1000; beyazPiksel_X[n] = 1000; } } otsus.UnlockBits(); return parmak_xy; }
public void Up() { ///Yukarıdan tarama /// BitmapSettings bmps = new BitmapSettings(bmp3); bmps.LockBits(); for (int y = 1; y < bmp3.Height - 1; y++) { for (int x = 0; x < bmp3.Width; x++) { lock (_LOCK) { if (bmps.GetPixel(x, y) == Color.FromArgb(255, 255, 255)) { UpHis[y] += 1; } } } if (first_ymin == 0 && UpHis[y] > setoff_y && UpHis[y - 1] <= setoff_y) { first_ymin = 1; Koordinat[3] = y;//y_min } } bmps.UnlockBits(); if (UpHis[2] >= setoff_bilek) { /* bilek fonksiyonunu çağır*/ Koordinat[3] = bilek_bul(UpHis, 0); yon = 4; } }
public void Right() { ///sağdan tarama BitmapSettings bmps = new BitmapSettings(bmp2); bmps.LockBits(); for (int x = bmp2.Width - 2; x >= 0; x--) { for (int y = 0; y < bmp2.Height; y++) { lock (_LOCK) { if (bmps.GetPixel(x, y) == Color.FromArgb(255, 255, 255)) { RightHis[x] += 1; } } } if (first_xmax == 0 && RightHis[x] > setoff_x && RightHis[x + 1] <= setoff_x) { first_xmax = 1; Koordinat[0] = x;//x_max } } bmps.UnlockBits(); if (RightHis[bmp2.Width - 3] >= setoff_bilek) { /* bilek fonksiyonunu çağır*/ Koordinat[0] = bilek_bul(RightHis, 1); yon = 2; } }
public void Left() { // soldan tarama BitmapSettings bmps = new BitmapSettings(bmp1); bmps.LockBits(); for (int x = 1; x < bmp1.Width - 1; x++) { for (int y = 0; y < bmp1.Height; y++) { lock (_LOCK) { if (bmps.GetPixel(x, y) == Color.FromArgb(255, 255, 255)) { LeftHis[x] += 1; } } } if (LeftHis[x] > setoff_x && LeftHis[x - 1] <= setoff_x) { Koordinat[1] = x;//x_min } } bmps.UnlockBits(); if (LeftHis[2] >= setoff_bilek) { /* bilek fonksiyonunu çağır*/ Koordinat[1] = bilek_bul(LeftHis, 0); yon = 1; } }
public void Down() { ///Aşağıdan tarama BitmapSettings bmps = new BitmapSettings(bmp4); bmps.LockBits(); for (int y = bmp4.Height - 2; y >= 0; y--) { for (int x = 0; x < bmp4.Width; x++) { lock (_LOCK) { if (bmps.GetPixel(x, y) == Color.FromArgb(255, 255, 255)) { DownHis[y] += 1; } } } if (first_ymax == 0 && DownHis[y] > setoff_y && DownHis[y + 1] <= setoff_y) { first_ymax = 1; Koordinat[2] = y;//ymax } } bmps.UnlockBits(); if (DownHis[bmp4.Height - 3] >= 30) { /* bilek fonksiyonunu çağır*/ Koordinat[2] = bilek_bul(DownHis, 1); yon = 3; } }
//parmak uçları olan bitmap public int[] FingersFind(Bitmap otsu, int x_max, int x_min, int y_max, int y_min) { int[] parmak_xy = new int[10];//5 olacak Array.Clear(parmak_xy, 0, parmak_xy.Length); BitmapSettings otsus = new BitmapSettings(otsu); otsus.LockBits(); int dizi_boyutu = Math.Abs(x_max - x_min); int[] beyazPiksel_Y = new int[dizi_boyutu + 10]; int[] beyazPiksel_X = new int[dizi_boyutu + 10]; int t = 0; for (int x = x_min; x < x_max; x++) { for (int y = y_min; y < y_max; y++) { if (otsus.GetPixel(x, y).R == 255) { if(t<beyazPiksel_Y.Length){ beyazPiksel_Y[t] = y; beyazPiksel_X[t] = x; //otsus.SetPixel(x, y, Color.Blue); t++; } } for (int p = 0; p < beyazPiksel_Y.Length; p++) { if (beyazPiksel_Y[p] == 0) { beyazPiksel_Y[p] = 1000; beyazPiksel_X[p] = 1000; } } } } beyazPiksel_Y[0] = 1000; beyazPiksel_X[0] = 1000; beyazPiksel_Y[1] = 1000; beyazPiksel_X[1] = 1000; parmak_xy[0] = beyazPiksel_Y.Min(); parmak_xy[5] = beyazPiksel_X[beyazPiksel_Y.ToList().IndexOf(beyazPiksel_Y.Min())]; int d = 25; int s = beyazPiksel_Y.ToList().IndexOf(beyazPiksel_Y.Min()); for (int n = s -d; n < s + d; n++) { if (n > 0 && n < beyazPiksel_Y.Length) { beyazPiksel_Y[n] = 1000; beyazPiksel_X[n] = 1000; } } parmak_xy[1] = beyazPiksel_Y.Min(); //y parmak_xy[6] = beyazPiksel_X[beyazPiksel_Y.ToList().IndexOf(beyazPiksel_Y.Min())];//x s = beyazPiksel_Y.ToList().IndexOf(beyazPiksel_Y.Min()); for (int n = s - d; n < s + d; n++) { if (n > 0 && n < beyazPiksel_Y.Length) { beyazPiksel_Y[n] = 1000; beyazPiksel_X[n] = 1000; } } parmak_xy[2] = beyazPiksel_Y.Min(); parmak_xy[7] = beyazPiksel_X[beyazPiksel_Y.ToList().IndexOf(beyazPiksel_Y.Min())]; s = beyazPiksel_Y.ToList().IndexOf(beyazPiksel_Y.Min()); for (int n = s - d; n < s + d; n++) { if (n > 0 && n < beyazPiksel_Y.Length) { beyazPiksel_Y[n] = 1000; beyazPiksel_X[n] = 1000; } } parmak_xy[3] = beyazPiksel_Y.Min(); parmak_xy[8] = beyazPiksel_X[beyazPiksel_Y.ToList().IndexOf(beyazPiksel_Y.Min())]; s = beyazPiksel_Y.ToList().IndexOf(beyazPiksel_Y.Min()); for (int n = s - d; n < s + d; n++) { if (n > 0 && n < beyazPiksel_Y.Length) { beyazPiksel_Y[n] = 1000; beyazPiksel_X[n] = 1000; } } parmak_xy[4] = beyazPiksel_Y.Min(); parmak_xy[9] = beyazPiksel_X[beyazPiksel_Y.ToList().IndexOf(beyazPiksel_Y.Min())]; s = beyazPiksel_Y.ToList().IndexOf(beyazPiksel_Y.Min()); for (int n = s - d; n < s + d; n++) { if (n > 0 && n < beyazPiksel_Y.Length) { beyazPiksel_Y[n] = 1000; beyazPiksel_X[n] = 1000; } } otsus.UnlockBits(); return parmak_xy; }