python中驗證碼連通域分割的方法詳解html
這篇文章主要給你們介紹了關於python中驗證碼連通域分割的相關資料,文中經過示例代碼介紹的很是詳細,對你們學習或者使用python具備必定的參考學習價值,須要的朋友們下面隨着小編來一塊兒學習學習吧python

實現思路數組
是用深度遍歷,對圖片進行二值化處理,先找到一個黑色像素,而後對這個像素的周圍8個像素進行判斷,若是沒有訪問過,就保存起來,而後最後這個數組的最小x和最大x就是x軸上的切割位置。這種分割的方法仍是隻能適用於沒有粘連的驗證碼,比垂直分割的好處是,能夠處理位置比較奇怪的驗證碼。
示例代碼
def cfs(img):
"""傳入二值化後的圖片進行連通域分割"""
pixdata = img.load()
w,h = img.size
visited = set()
q = queue.Queue()
offset = [(-1,-1),(0,-1),(1,-1),(-1,0),(1,0),(-1,1),(0,1),(1,1)]
cuts = []
for x in range(w):
for y in range(h):
x_axis = []
#y_axis = []
if pixdata[x,y] == 0 and (x,y) not in visited:
q.put((x,y))
visited.add((x,y))
while not q.empty():
x_p,y_p = q.get()
for x_offset,y_offset in offset:
x_c,y_c = x_p x_offset,y_p y_offset
if (x_c,y_c) in visited:
continue
visited.add((x_c,y_c))
try:
if pixdata[x_c,y_c] == 0:
q.put((x_c,y_c))
x_axis.append(x_c)
#y_axis.append(y_c)
except:
pass
if x_axis:
min_x,max_x = min(x_axis),max(x_axis)
if max_x - min_x > 3:
# 寬度小於3的認爲是噪點,根據須要修改
cuts.append((min_x,max_x 1))
return cuts
def saveSmall(img, outDir, cuts):
w, h = img.size
pixdata = img.load()
for i, item in enumerate(cuts):
box = (item[0], 0, item[1], h)
img.crop(box).save(outDir str(i) ".png")
img = Image.open('out/51.png')
saveSmall(img, 'cfs/', cfs(img))
總結
以上就是這篇文章的所有內容了,但願本文的內容對你們的學習或者工做具備必定的參考學習價值app