目前不少系统的验证码做得越来越复杂,人眼都难以识别,尤其是QQ之类的验证码,想要识别,太难了。
现在有这样一个验证码:
一般的验证码识别,都是先进行前处理,然后分割,在进行识别。这个验证码没有其他噪音,但存在一条横穿的曲线干扰,并且验证码中字体是粘连在一起的。
如果不将干扰曲线去除,那么整个识别将会受到一定的影响,为此,先要去掉这条曲线,首先通过的办法是将先获取曲线的头位置(x,y),这一部分很简单,代码如下:
1 defget_left_start_point(im):2 start_point=(0,0)3 found=False4 w, h=im.size5 data=list(im.getdata())6 forxinxrange(w):7 foryinxrange(h):8 ifdata[ y*w+x ]!=white:9 found=True10 start_point=(x,y)11 break12 13 iffound:14 break15 returnstart_point
取到头结点后,然后依次从左到右遍历过去,上下判断是否为黑点,将线条坐标位置保存起来,之后进行线条位置去除,代码如下(感谢孙志海朋友的提示):
defremove_line(im, aim):
w,h=im.size
data=list( im.getdata() )forx,yinaim:
curr=data[ y*w+x ]
prev=data[ (y-1)*w+x]
next=data[ (y+1)*w+x]ifprev==blackandnext==black:continueifprev==black:
data[ y*w+x ]=white
data[ (y-1)*w+x]=whiteelifnext==black:
data[ y*w+x ]=white
data[ (y+1)*w+x]=whiteelse:
data[ y*w+x ]=white
于是可以得到去除黑线后的图像为:
除了几个孤立的点,图像中的黑线基本被去除干净,下面是几张是处理的比较好的:
下面这一张处理的比较差:
鉴于之前有blog内容被网络转载,并不注明出处,因此添加下面内容:
author:ubunoon
homepage: http://qtrstudio.com
blog: http://www.cnblogs.com/ubunoon ; http://qtrstudio.com/blog
email:netubu#gmail.com
copyright: Copyright © 2011. All rights reserved.