全球旧事资料 分类
C识别验证码200909170905以天涯博客里的评论验证码为例,说明验证码识别的基本思路和方法:
(网页截图)第一步、获取验证码图片C可以用HttpWebRequest类GET验证码的网址,得到返回的数据流,再将数据流值赋给Bitmap变量。在Wi
form里放一个PictureBox控件,将它的Image属性指定为Bitmap变量,就可以显示出验证码图片了。也可以使用Bitmap的Save方法将图片保存成Bmp档案。CcodeStreamresStreamrespo
seGetRespo
seStream得到验证码数据流Bitmapsourcebm
ewBitmapresStream初始化Bitmap图片在Photoshop中将验证码图片放大1600%,如下:
第二步、将验证码图片去色(将彩色转换为灰度)去色是为了进一步做成黑白双色图片。CcodeColorcsourcebmGetPixelx、yi
tlumai
tcR03cG059cB011转换灰度的算法sourcebmSetPixelx、y、ColorFromArgbluma、luma、luma
f第三步、去杂色,转换为黑白图片从灰度图片中可以看出,数字的颜色比较深,而杂色都是比较浅,所以可以设定一个临界颜色值,颜色高于或等于这个值的设置为白色,低于这个值的设置为黑色。CcodeColorcsourcebmGetPixelx、yifcRcritical_valuesourcebmSetPixelx、y、ColorFromArgb255、255、255
CcodeelsesourcebmSetPixelx、y、ColorFromArgb0、0、0
第四步、动态得到每个数字的边界
fCcodefori
tx0xsourcebmWidthxmyColum
truefori
ty0ysourcebmHeightyColorcsourcebmGetPixelx、yifcR0charStartfalse第一次出现黑点widthStartXcharNumxcharStarttruebreakifcR0charStarttrue后续出现黑点myColum
falsebreakifmyColum
truecharStarttruewidthStartXcharNumx如果当列没有黑点并且前面出现过黑点还没结束widthE
dXcharNumx1charStartfalsecharNumifcharStarttruemyColum
falsexbmpWidth1如果开始出现黑点了并且最后一列也有黑点widthE
dXcharNumxcharStartfalsecharNum
f五、得到每个字符的特征码在每个字符的边界内,检测每个像素,如果象素为白色则为「0」,如果象素为黑色则为「1」,将「0」「1」连起来就是该数字或字符的特征码。CcodeColorcsourcebmGetPixelx、yifcR0strstr
好听全球资料 返回顶部