验证码识别技术研究(1)

 1             string imgpName = @"005";

 2             Image image = Image.FromFile(@"G:\" + imgpName + @".jpg");

 3             Image img = (Image)image.Clone();

 4             Bitmap bmp = new Bitmap((Image)image.Clone());

 5             int gray = 0;

 6             Graphics g = Graphics.FromImage(image);

 7             int sum = 0;

 8             int[] zf = new int[256];//灰度数组

 9 

10             #region 灰度平均值

11             for (int x = 0; x < bmp.Width; x++)

12             {

13                 for (int y = 0; y < bmp.Height; y++)

14                 {

15                     //灰度算法

16                     gray = (bmp.GetPixel(x, y).R * 299 + bmp.GetPixel(x, y).G * 587 + bmp.GetPixel(x, y).B * 114 + 500) / 1000;

17                     zf[gray]++;

18                     sum += gray;

19                 }

20             }

21             int avg = sum / (bmp.Width * bmp.Height);

22             #endregion

23 

24             #region 以获得的灰度平均值为阀值,对图像进行二值化处理

25             for (int x = 0; x < bmp.Width; x++)

26             {

27                 for (int y = 0; y < bmp.Height; y++)

28                 {

29                     gray = (bmp.GetPixel(x, y).R * 299 + bmp.GetPixel(x, y).G * 587 + bmp.GetPixel(x, y).B * 114 + 500) / 1000;

30                     zf[gray]++;

31                     sum += gray;

32                     Color color = new Color();

33                     if (gray > avg)

34                     {

35                         color = Color.FromArgb(255, 255, 255);

36                     }

37                     else

38                     {

39                         color = Color.FromArgb(0, 0, 0);

40                     }

41                     g.DrawLine(new Pen(color, 1), x, y, x + 1, y + 1);

42                 }

43             }

44             #endregion

45 

46             #region 直方图绘制

47             Graphics gg = Graphics.FromImage(img);

48             //string k = ((int)(bmp.Height * 0.5) / zf.Max()).ToString();

49             for (int i = 0; i < zf.Length; i++)

50             {

51                 Pen p = new Pen(Color.Red, 1);

52                 gg.DrawLine(p, i, 0, i, zf[i]);

53             }

54             #endregion

55 

56             img.Save(@"G:\" + imgpName + @"直方图.jpg");

57             gg.Dispose();

58             image.Save(@"G:\" + imgpName + @"二值化图.jpg");

59             image.Dispose();

60             g.Dispose();

61             MessageBox.Show("OK!\nGray_AVG:" + avg);//灰度平均值

 灰度算法公式:

G = (R * 299 + G * 587 + B * 114 + 500) / 1000

 

你可能感兴趣的:(验证码)