• C# 天涯博客验证码识别(转)


    以天涯博客里的评论验证码为例,说明验证码识别的基本思路和方法:

    (网页截图)

    第一步、获取验证码图片
    C#可以用HttpWebRequest类GET验证码的网址,得到返回的数据流,再将数据流值赋给Bitmap变量。在Winform里放一个PictureBox控件,将它的Image属性指定为Bitmap变量,就可以显示出验证码图片了。
    也可以使用Bitmap的Save方法将图片保存成Bmp档案。
    C# code
    Stream resStream = response.GetResponseStream();//得到验证码数据流 Bitmap sourcebm =new Bitmap(resStream);//初始化Bitmap图片
    在Photoshop中将验证码图片放大1600%,如下:


    第二步、将验证码图片去色(将彩色转换为灰度)
    去色是为了进一步做成黑白双色图片。
    C# code
    Color c = sourcebm.GetPixel(x、y); int luma = (int)(c.R *0.3+ c.G *0.59+ c.B *0.11);//转换灰度的算法 sourcebm.SetPixel(x、y、Color.FromArgb(luma、luma、luma));


    第三步、去杂色,转换为黑白图片
    从灰度图片中可以看出,数字的颜色比较深,而杂色都是比较浅,所以可以设定一个临界颜色值,颜色高于或等于这个值的设置为白色,低于这个值的设置为黑色。
    C# code
    Color c = sourcebm.GetPixel(x、y); if (c.R >= critical_value) sourcebm.SetPixel(x、y、Color.FromArgb(255255255));

    C# code
    else sourcebm.SetPixel(x、y、Color.FromArgb(000));


    第四步、动态得到每个数字的边界


    C# code
    for (int x =0; x < sourcebm.Width; x++) { myColumn =true; for (int y =0; y < sourcebm.Height; y++) { Color c = sourcebm.GetPixel(x、y); if (c.R ==0&& charStart ==false)//第一次出现黑点 { widthStartX[charNum] = x; charStart =true; break; } if (c.R ==0&& charStart ==true)//后续出现黑点 { myColumn =false; break; } } if (myColumn ==true&& charStart ==true&& widthStartX[charNum] < x)//如果当列没有黑点并且前面出现过黑点还没结束 { widthEndX[charNum] = x -1; charStart =false; charNum++; } if (charStart ==true&& myColumn ==false&& x == (bmp.Width -1))//如果开始出现黑点了,并且最后一列也有黑点 { widthEndX[charNum] = x; charStart =false; charNum++; } }
    五、得到每个字符的特征码
    在每个字符的边界内,检测每个像素,如果象素为白色则为「0」,如果象素为黑色则为「1」,将「0」「1」连起来就是该数字或字符的特征码。
    C# code
    Color c = sourcebm.GetPixel(x、y); if (c.R ==0) str = str +"1"; else str = str +"0";

    六、完成验证码图片的识别
    将获取的特征码和对应的数字或字符保存起来,下次再将新获取的特征码跟保存的特征码对比,如果相同则提取对应的数字或字符,完成验证码的识别。
  • 相关阅读:
    字符转换(2,8,10,16进制,ASCII码)
    js正则表达式验证
    不能在DropDownList 中选择多个项
    SQL中sum(),avg()等统计结果为null的解决方法
    文本框TextBox只允许输入数字,不用onkeyup
    ORA01830: 日期格式图片在转换整个输入字符串之前结束
    Oracle数据库中的左连接与右连接
    asp.net服务器验证控件失效的问题
    在博客园开通博客的第一天
    米勒拉宾素数测试
  • 原文地址:https://www.cnblogs.com/yeye518/p/2546019.html
Copyright © 2020-2023  润新知