目前不少系統的驗證碼做得越來越複雜,人眼都難以識別,尤其是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
取到頭結點後,然後依次從左至右遍曆過去,上下判斷是否為黑點,將線條座標位置儲存起來,之後進行線條位置去除,(感謝孫志海朋友的提示):(代碼部分略)
於是可以得到去除黑線後的映像為:
除了幾個孤立的點,映像中的黑線基本被去除乾淨,下面是幾張是處理的比較好的:
下面這一張處理的比較差:
鑒於之前有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.