祛除验证码中的线条 python
2013-01-01 14:42
399 查看
作者: ubunoon 来源: 博客园 发布时间:
2011-02-16 22:55
目前不少系统的验证码做得越来越复杂,人眼都难以识别,尤其是QQ之类的验证码,想要识别,太难了。
现在有这样一个验证码:
一般的验证码识别,都是先进行前处理,然后分割,在进行识别。这个验证码没有其他噪音,但存在一条横穿的曲线干扰,并且验证码中字体是粘连在一起的。
如果不将干扰曲线去除,那么整个识别将会受到一定的影响,为此,先要去掉这条曲线,首先通过的办法是将先获取曲线的头位置(x,y),这一部分很简单,代码如下:
1 def get_left_start_point(im):
2 start_point = (0,0)
3 found = False
4 w, h = im.size
5 data = list(im.getdata())
6 for x in xrange(w):
7 for y in xrange(h):
8 if data[ y*w + x ] != white:
9 found = True
10 start_point = (x,y)
11 break
12
13 if found:
14 break
15 return start_point
取到头结点后,然后依次从左到右遍历过去,上下判断是否为黑点,将线条坐标位置保存起来,之后进行线条位置去除,代码如下(感谢孙志海朋友的提示):
def remove_line(im, aim):
w,h = im.size
data = list( im.getdata() )
for x,y in aim:
curr = data[ y * w + x ]
prev = data[ (y-1) * w + x]
next = data[ (y+1) * w + x]
if prev == black and next == black:
continue
if prev == black:
data[ y * w + x ] = white
data[ (y-1) * w + x] = white
elif next == black:
data[ y * w + x ] = white
data[ (y+1) * w + x] = white
else:
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.
2011-02-16 22:55
目前不少系统的验证码做得越来越复杂,人眼都难以识别,尤其是QQ之类的验证码,想要识别,太难了。
现在有这样一个验证码:
一般的验证码识别,都是先进行前处理,然后分割,在进行识别。这个验证码没有其他噪音,但存在一条横穿的曲线干扰,并且验证码中字体是粘连在一起的。
如果不将干扰曲线去除,那么整个识别将会受到一定的影响,为此,先要去掉这条曲线,首先通过的办法是将先获取曲线的头位置(x,y),这一部分很简单,代码如下:
1 def get_left_start_point(im):
2 start_point = (0,0)
3 found = False
4 w, h = im.size
5 data = list(im.getdata())
6 for x in xrange(w):
7 for y in xrange(h):
8 if data[ y*w + x ] != white:
9 found = True
10 start_point = (x,y)
11 break
12
13 if found:
14 break
15 return start_point
取到头结点后,然后依次从左到右遍历过去,上下判断是否为黑点,将线条坐标位置保存起来,之后进行线条位置去除,代码如下(感谢孙志海朋友的提示):
def remove_line(im, aim):
w,h = im.size
data = list( im.getdata() )
for x,y in aim:
curr = data[ y * w + x ]
prev = data[ (y-1) * w + x]
next = data[ (y+1) * w + x]
if prev == black and next == black:
continue
if prev == black:
data[ y * w + x ] = white
data[ (y-1) * w + x] = white
elif next == black:
data[ y * w + x ] = white
data[ (y+1) * w + x] = white
else:
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.
相关文章推荐
- python爬虫解决百度贴吧登陆验证码问题
- [置顶] 【python 验证码】产生中文验证码
- Python实战之验证码生成
- python实现验证码
- Python 随机生成中文验证码
- python爬虫学习日记(1)--获取验证码
- day15 python随机生成验证码的代码
- 使用Python破解验证码
- python生成验证码
- python生成验证码
- python中matplotlib的颜色及线条控制
- Python图片处理PIL/pillow/生成验证码/出现KeyError: 和The _imagingft C module is not installed
- Python+Selenium+PIL+Tesseract自动识别验证码进行一键登录
- 在Python中用Request库模拟登录(三):Discuz论坛(未加密,有验证码,有隐藏验证)
- python 中英文验证码实现
- python随机验证码函数
- python实现带验证码网站的自动登陆
- python-50: 验证码
- Python验证码生成