python中驗證碼連通域分割的方法詳解

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

相關文章
相關標籤/搜索