为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

图片验证码识别

2017-09-02 5页 doc 43KB 62阅读

用户头像

is_531654

暂无简介

举报
图片验证码识别图片验证码识别 图片验证码识别思路和方法(VB.Net) 作者:ntdrv 来源:ntdrv的博客 更新时间:2010-6-28 除了本文关于图片验证码识别的思路,乐博网还有一篇关于图片验证码的文章和源代码, 访问地址: VB.Ne图形验证码识别的源代码 图片验证码识别思路和方法(VB.Net) 由乐博网自转载 www.ntdrv.cn/Blog/Article.aspx?ID=2311 投票软件比较有技术含量的部分就在验证码识别。为防止投票作弊,很多投票网站都会加随机验证码,输入验证码后才能投票。但是加了验证码是否...
图片验证码识别
图片验证码识别 图片验证码识别思路和(VB.Net) 作者:ntdrv 来源:ntdrv的博客 更新时间:2010-6-28 除了本文关于图片验证码识别的思路,乐博网还有一篇关于图片验证码的文章和源代码, 访问地址: VB.Ne图形验证码识别的源代码 图片验证码识别思路和方法(VB.Net) 由乐博网自转载 www.ntdrv.cn/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; charStart = false; charNum++; } } 五、得到每个字符的特征码 在每个字符的边界内,检测每个象素,如果象素为白色则为"0",如果象素为黑色则为"1",将"0""1"连 起来就是该数字或字符的特征码。 Color c = sourcebm.GetPixel(x, y); if (c.R == 0) str = str + "1"; else str = str + "0"; 六、完成验证码图片的识别 将获取的特征码和对应的数字或字符保存起来,下次再将新获取的特征码跟保存的特征码对比,如果 相同则提取对应的数字或字符,完成验证码的识别。
/
本文档为【图片验证码识别】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索