首页 新闻 会员 周边 捐助

C# BitmapData 验证码图片二值化问题,验证码识别二值化问题

0
悬赏园豆:5 [已解决问题] 解决于 2016-03-18 00:06

大家看图片,确实的,这不是标准的二值化操作,我的代码是这样的,

但是为什么会出现很多彩色雪花点的问题呢,我的代码问题在哪呢,求帮助

 1 Bitmap bit1 = new Bitmap(bit);
 2 
 3                 Rectangle rect1 = new Rectangle(0, 0, bit1.Width, bit1.Height);
 4                 BitmapData bitd = bit1.LockBits(rect1, ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb);  
 5 
 6                 IntPtr srcPtr = bitd.Scan0;
 7 
 8                 int scanWidth = bitd.Width * 3;
 9                 int src_bytes = scanWidth * bitd.Height;
10                 byte[] srcRGBValues = new byte[src_bytes];
11 
12                 Marshal.Copy(srcPtr, srcRGBValues, 0, src_bytes);
13 
14                     //灰度化处理  
15                     int m = 0, i = 0, j = 0;  //m表示行,j表示列  
16                     int k = 0;
17 
18                     for (i = 0; i < bit.Height; i++)  //只获取图片的rows行像素值  
19                     {
20                         for (j = 0; j < bit.Width; j++)
21                         {
22                             //只处理每行中图像像素数据,舍弃未用空间  
23                             //注意位图结构中RGB按BGR的顺序存储  
24                             k = 3 * j;
25                             var grays = Convert.ToInt16(srcRGBValues[i * scanWidth + k + 2]) +
26                                         Convert.ToInt16(srcRGBValues[i * scanWidth + k + 1]) +
27                                         Convert.ToInt16(srcRGBValues[i * scanWidth + k + 0]);
28                             if (grays >= 382)
29                             {
30                                 srcRGBValues[i * scanWidth + k + 2] = Convert.ToByte(255);
31                                 srcRGBValues[i * scanWidth + k + 1] = Convert.ToByte(255);
32                                 srcRGBValues[i * scanWidth + k + 0] = Convert.ToByte(255);
33                             }
34                             else
35                             {
36                                 srcRGBValues[i * scanWidth + k + 2] = Convert.ToByte(0);
37                                 srcRGBValues[i * scanWidth + k + 1] = Convert.ToByte(0);
38                                 srcRGBValues[i * scanWidth + k + 0] = Convert.ToByte(0);
39 
40                             }
41                         }
42                         m++;
43                     }
44                 Marshal.Copy(srcRGBValues, 0, srcPtr, src_bytes);
45                 bit1.UnlockBits(bitd);
46                 Image image1 = bit1;

另外,谁能提供C#的验证码识别的相关方法吗,还有二值化的标准方法是怎么的呢

程序员丁的主页 程序员丁 | 初学一级 | 园豆:119
提问于:2015-05-15 00:43
< >
分享
最佳答案
0

搜索: C#图片二值化 ,可以按照里面的方案试一下。

收获园豆:5
幻天芒 | 高人七级 |园豆:37207 | 2015-05-15 09:36

什么?没懂

程序员丁 | 园豆:119 (初学一级) | 2015-05-17 16:23

@竹峰(Z.峰): 给你搜索的关键字哇:“C#图片二值化”,相当多的示例代码。

幻天芒 | 园豆:37207 (高人七级) | 2015-05-17 23:00

@幻天芒: 约等于没回答,好吧,可惜就是百度来的,没搞定

程序员丁 | 园豆:119 (初学一级) | 2016-03-18 00:06

@LoveLong: 二值化就是把像素点一个一个取出来,然后按照一个极限值判断,大于就1,小于就0,这样就把图片变成了黑白两色的。

幻天芒 | 园豆:37207 (高人七级) | 2016-03-18 09:06
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册