python驗證碼識別——前處理

作者: ubunoon  來源: 博客園  發布時間: 2011-02-16 22:55  閱讀: 8252 次  推薦: 0   原文鏈接   [收藏]  

目前不少系統的驗證碼做得越來越復雜,人眼都難以識別,尤其是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.

0
0
 
標簽:python
 
 

文章列表

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()