熱線電話:13121318867

登錄
首頁精彩閱讀python中驗證碼連通域分割的方法詳解
python中驗證碼連通域分割的方法詳解
2018-08-13
收藏

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))
總結
以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值

數據分析咨詢請掃描二維碼

若不方便掃碼,搜微信號:CDAshujufenxi

數據分析師資訊
更多

OK
客服在線
立即咨詢
日韩人妻系列无码专区视频,先锋高清无码,无码免费视欧非,国精产品一区一区三区无码
客服在線
立即咨詢