网站大量收购闲置独家精品文档,联系QQ:2885784924

图片验证码识别.doc

  1. 1、本文档共5页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
图片验证码识别

图片验证码识别思路和方法(VB.Net) 作者:ntdrv??? 来源:ntdrv的博客 ??? 更新时间:2010-6-28 除了本文关于图片验证码识别的思路,乐博网还有一篇关于图片验证码的文章和源代码, 访问地址:???????? VB.Ne图形验证码识别的源代码 图片验证码识别思路和方法(VB.Net) 由乐博网自转载 /Blog/Article.aspx?ID=2311 ?????? 投票软件比较有技术含量的部分就在验证码识别。为防止投票作弊,很多投票网站都会加随机验证码,输入验证码后才能投票。但是加了验证码是否就能万无一失呢,也不尽然。虽然不是所有验证码都能识别(如QQ的变形汉字验证码是不太可能用软件识别的,个人觉得),但还是有很多验证码可以用软件来识别的。   下面以天涯博客里的评论验证码为例,说明验证码识别的基本思路和方法: (网页截图) 第一步、获取验证码图片   C#可以用HttpWebRequest类GET验证码的网址,得到返回的数据流,再将数据流值赋给Bitmap变量。在Winform里放一个PictureBox控件,将它的Image属性指定为Bitmap变量,就可以显示出验证码图片了。 也可以使用Bitmap的Save方法将图片保存成Bmp文件。 ??? Stream resStream = response.GetResponseStream();//得到验证码数据流 ??? Bitmap sourcebm = new Bitmap(resStream);//初始化Bitmap图片 在Photoshop中将验证码图片放大1600%,如下: ?? 第二步、将验证码图片去色(将彩色转换为灰度)   去色是为了进一步做成黑白双色图片。 ??? 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)); ??第三步、去杂色,转换为黑白图片   从灰度图片中可以看出,数字的颜色比较深,而杂色都是比较浅,所以可以设定一个临界颜色值,颜色高于或等于这个值的设置为白色,低于这个值的设置为黑色。 ??? Color c = sourcebm.GetPixel(x, y); ??? if (c.R = critical_value) ??????? sourcebm.SetPixel(x, y, Color.FromArgb(255, 255, 255)); ??? else ??????? sourcebm.SetPixel(x, y, Color.FromArgb(0, 0, 0)); ??第四步、动态得到每个数字的边界 ? 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; ??????? charSt

文档评论(0)

pangzilva + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档