c#实现识别图片上的验证码数字

2019-12-30 11:03:40刘景俊
  • // bmpData.PixelFormat = PixelFormat.Format24bppRgb;  IntPtr scan0 = bmpData.Scan0; 
  • int len = bmpobj.Width * bmpobj.Height;  int[] pixels = new int[len]; 
  • Marshal.Copy(scan0, pixels, 0, len);   
  • //对图片进行处理  int GrayValue = 0; 
  • for (int i = 0; i < len; i++)  { 
  • GrayValue = GetGrayNumColor(Color.FromArgb(pixels));  pixels = (byte)(Color.FromArgb(GrayValue, GrayValue, GrayValue)).ToArgb(); //Color转byte 
  • }   
  • bmpobj.UnlockBits(bmpData);  } 
  •   /// <summary> 
  • /// 得到有效图形并调整为可平均分割的大小  /// </summary> 
  • /// <param name="dgGrayValue">灰度背景分界值</param>  /// <param name="CharsCount">有效字符数</param> 
  • /// <returns></returns>  public void GetPicValidByValue(int dgGrayValue, int CharsCount) 
  • {  int posx1 = bmpobj.Width; int posy1 = bmpobj.Height; 
  • int posx2 = 0; int posy2 = 0;  for (int i = 0; i < bmpobj.Height; i++) //找有效区 
  • {  for (int j = 0; j < bmpobj.Width; j++) 
  • {  int pixelValue = bmpobj.GetPixel(j, i).R; 
  • if (pixelValue < dgGrayValue) //根据灰度值  { 
  • if (posx1 > j) posx1 = j;  if (posy1 > i) posy1 = i; 
  •   if (posx2 < j) posx2 = j; 
  • if (posy2 < i) posy2 = i;  }; 
  • };  }; 
  • // 确保能整除  int Span = CharsCount - (posx2 - posx1 + 1) % CharsCount; //可整除的差额数 
  • if (Span < CharsCount)  { 
  • int leftSpan = Span / 2; //分配到左边的空列 ,如span为单数,则右边比左边大1  if (posx1 > leftSpan)