當前位置 主頁 > 服務器問題 > Linux/apache問題 > 最大化 縮小

    Python實現投影法分割圖像示例(一)

    欄目:Linux/apache問題 時間:2020-01-19 08:33

    投影法多用于圖像的閾值分割。閑話不多說,現用Python實現。

    上代碼。

    import cv2
    import numpy
    img = cv2.imread('D:/0.jpg', cv2.COLOR_BGR2GRAY)
    height, width = img.shape[:2]
    #resized = cv2.resize(img, (3*width,3*height), interpolation=cv2.INTER_CUBIC)
    #二值化
    (_, thresh) = cv2.threshold(img, 150, 255, cv2.THRESH_BINARY) 
    #cv2.imshow('thresh', thresh)
    #擴大黑色面積,使效果更明顯
    kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (10, 10))#形態學處理,定義矩形結構
    closed = cv2.erode(thresh, None, iterations = 5)
    cv2.imshow('erode',closed)
    height, width = closed.shape[:2]
    v = [0]*width
    z = [0]*height
    a = 0
    #垂直投影
    #統計并存儲每一列的黑點數
    for x in range(0, width):    
     for y in range(0, height):
      if closed[y,x][0] == 0:
       a = a + 1
      else :
       continue
     v[x] = a
     a = 0
    l = len(v)
    #print l
    #print width
    #創建空白圖片,繪制垂直投影圖
    emptyImage = numpy.zeros((height, width, 3), numpy.uint8) 
    for x in range(0,width):
     for y in range(0, v[x]):
      b = (255,255,255)
      emptyImage[y,x] = b
    cv2.imshow('chuizhi', emptyImage)
    #水平投影
    #統計每一行的黑點數
    a = 0
    emptyImage1 = numpy.zeros((height, width, 3), numpy.uint8) 
    for y in range(0, height):
     for x in range(0, width):
      if closed[y,x][0] == 0:
       a = a + 1
      else :
       continue
     z[y] = a
     a = 0
    l = len(z)
    #print l
    #print height
    #繪制水平投影圖
    for y in range(0,height):
     for x in range(0, z[y]):
      b = (255,255,255)
      emptyImage1[y,x] = b
    cv2.imshow('shuipin', emptyImage1)
    cv2.waitKey(0)
    

    原圖

    垂直投影圖

    水平投影圖

    由這兩圖可以確定我們所需的分割點,從而可以進行下一步的文本分割。這將在下一篇博客中實現。

    以上這篇Python實現投影法分割圖像示例就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持IIS7站長之家。

    下一篇:沒有了
777亚洲人成视频免费视频