欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

Python+opencv 實現圖片文字的分割的方法示例

系統 1803 0

實現步驟:

1、通過水平投影對圖形進行水平分割,獲取每一行的圖像;

2、通過垂直投影對分割的每一行圖像進行垂直分割,最終確定每一個字符的坐標位置,分割出每一個字符;

先簡單介紹一下投影法:分別在水平和垂直方向對預處理(二值化)的圖像某一種像素進行統計,對于二值化圖像非黑即白,我們通過對其中的白點或者黑點進行統計,根據統計結果就可以判斷出每一行的上下邊界以及每一列的左右邊界,從而實現分割的目的。

下面通過Python+opencv來實現該功能

首先來實現水平投影:

            
import cv2

import numpy as np

 

'''水平投影'''

def getHProjection(image):

 hProjection = np.zeros(image.shape,np.uint8)

 #圖像高與寬

 (h,w)=image.shape 

 #長度與圖像高度一致的數組

 h_ = [0]*h

 #循環統計每一行白色像素的個數

 for y in range(h):

  for x in range(w):

   if image[y,x] == 255:

    h_[y]+=1

 #繪制水平投影圖像

 for y in range(h):

  for x in range(h_[y]):

   hProjection[y,x] = 255

 cv2.imshow('hProjection2',hProjection)

 

 return h_

 

if __name__ == "__main__":

 #讀入原始圖像

 origineImage = cv2.imread('test.jpg')

 # 圖像灰度化 

 #image = cv2.imread('test.jpg',0)

 image = cv2.cvtColor(origineImage,cv2.COLOR_BGR2GRAY)

 cv2.imshow('gray',image)

 # 將圖片二值化

 retval, img = cv2.threshold(image,127,255,cv2.THRESH_BINARY_INV)

 cv2.imshow('binary',img)

 #水平投影

 H = getHProjection(img)
          

Python+opencv 實現圖片文字的分割的方法示例_第1張圖片

通過上面的水平投影,根據其白色小山峰的起始位置就可以界定出每一行的起始位置,從而把每一行分割出來。

獲得每一行圖像之后,可以對其進行垂直投影

            
def getVProjection(image):

 vProjection = np.zeros(image.shape,np.uint8);

 #圖像高與寬

 (h,w) = image.shape

 #長度與圖像寬度一致的數組

 w_ = [0]*w

 #循環統計每一列白色像素的個數

 for x in range(w):

  for y in range(h):

   if image[y,x] == 255:

    w_[x]+=1

 #繪制垂直平投影圖像

 for x in range(w):

  for y in range(h-w_[x],h):

   vProjection[y,x] = 255

 cv2.imshow('vProjection',vProjection)

 return w_
          

Python+opencv 實現圖片文字的分割的方法示例_第2張圖片

通過垂直投影可以獲得每一個字符左右的起始位置,這樣也就可以獲得到每一個字符的具體坐標位置,即一個矩形框的位置。

下面是實現的全部代碼:

            
import cv2

import numpy as np

 

'''水平投影'''

def getHProjection(image):

 hProjection = np.zeros(image.shape,np.uint8)

 #圖像高與寬

 (h,w)=image.shape 

 #長度與圖像高度一致的數組

 h_ = [0]*h

 #循環統計每一行白色像素的個數

 for y in range(h):

  for x in range(w):

   if image[y,x] == 255:

    h_[y]+=1

 #繪制水平投影圖像

 for y in range(h):

  for x in range(h_[y]):

   hProjection[y,x] = 255

 cv2.imshow('hProjection2',hProjection)

 

 return h_

 

def getVProjection(image):

 vProjection = np.zeros(image.shape,np.uint8);

 #圖像高與寬

 (h,w) = image.shape

 #長度與圖像寬度一致的數組

 w_ = [0]*w

 #循環統計每一列白色像素的個數

 for x in range(w):

  for y in range(h):

   if image[y,x] == 255:

    w_[x]+=1

 #繪制垂直平投影圖像

 for x in range(w):

  for y in range(h-w_[x],h):

   vProjection[y,x] = 255

 #cv2.imshow('vProjection',vProjection)

 return w_

 

if __name__ == "__main__":

 #讀入原始圖像

 origineImage = cv2.imread('test.jpg')

 # 圖像灰度化 

 #image = cv2.imread('test.jpg',0)

 image = cv2.cvtColor(origineImage,cv2.COLOR_BGR2GRAY)

 cv2.imshow('gray',image)

 # 將圖片二值化

 retval, img = cv2.threshold(image,127,255,cv2.THRESH_BINARY_INV)

 cv2.imshow('binary',img)

 #圖像高與寬

 (h,w)=img.shape 

 Position = []

 #水平投影

 H = getHProjection(img)

 

 start = 0

 H_Start = []

 H_End = []

 #根據水平投影獲取垂直分割位置

 for i in range(len(H)):

  if H[i] > 0 and start ==0:

   H_Start.append(i)

   start = 1

  if H[i] <= 0 and start == 1:

   H_End.append(i)

   start = 0

 #分割行,分割之后再進行列分割并保存分割位置

 for i in range(len(H_Start)):

  #獲取行圖像

  cropImg = img[H_Start[i]:H_End[i], 0:w]

  #cv2.imshow('cropImg',cropImg)

  #對行圖像進行垂直投影

  W = getVProjection(cropImg)

  Wstart = 0

  Wend = 0

  W_Start = 0

  W_End = 0

  for j in range(len(W)):

   if W[j] > 0 and Wstart ==0:

    W_Start =j

    Wstart = 1

    Wend=0

   if W[j] <= 0 and Wstart == 1:

    W_End =j

    Wstart = 0

    Wend=1

   if Wend == 1:

    Position.append([W_Start,H_Start[i],W_End,H_End[i]])

    Wend =0

 #根據確定的位置分割字符

 for m in range(len(Position)):

  cv2.rectangle(origineImage, (Position[m][0],Position[m][1]), (Position[m][2],Position[m][3]), (0 ,229 ,238), 1)

 cv2.imshow('image',origineImage)

 cv2.waitKey(0)
          

Python+opencv 實現圖片文字的分割的方法示例_第3張圖片

從分割的結果上看,基本上實現了圖片中文字的分割。但由于中文結構復雜性,對于一些文字的分割并不理想,比如“葉”、“桃”等字會出現過度分割現象;對于有粘連的兩個字會出現分割不夠的現象,比如上圖中的“念想”。不過可以從圖像預處理(腐蝕),邊界判斷閾值的調整等方面進行優化。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 超级碰碰碰视频在线观看 | 欧日韩不卡在线视频 | 精品免费国产一区二区三区 | 国产尤物在线观看一区二区 | 日本一区二区视频在线 | 丁香激情五月 | 97超级碰碰碰在线播放 | 一区二区在线 | 精品久久九九 | 成人国产免费视频 | 免费视频片在线观看大片 | 亚洲国产欧美自拍 | 欧美日韩国产一区二区三区播放 | 亚洲精品成人av久久 | 日韩国产在线 | 日本翁熄系列乱在线视频 | 在线亚洲一区二区 | 中文字幕亚洲一区二区三区 | 一区二区三区四区在线 | 国产精品久久久久久久久久大牛 | 国产精品视频第一区二区三区 | 欧美亚洲韩国国产综合五月天 | 激情小说图| 成人毛片免费网站 | 午夜在线视频一区二区三区 | 99人中文字幕亚洲区 | 中文字幕三区 | 波多野结衣三级视频 | 天堂在线v | 日韩国产中文字幕 | 日本高清色视频在线观看免费 | 99久久99 | 国产精品久久久久国产精品 | 色狠狠xx| 日本久久精品免视看国产成人 | cheaperapp.work直接访问 | 色网站在线免费观看 | 老色鬼a∨在线视频在线观看 | 经典香港一级a毛片免费看 亚洲精品国产精品国自产观看 | 日本aaa级片 | 精品成人一区二区 |