最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python+opencv 實(shí)現(xiàn)圖片文字的分割的方法示例

 更新時(shí)間:2019年07月04日 11:23:02   作者:壞小孩90  
這篇文章主要介紹了Python+opencv 實(shí)現(xiàn)圖片文字的分割的方法示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

實(shí)現(xiàn)步驟:

1、通過(guò)水平投影對(duì)圖形進(jìn)行水平分割,獲取每一行的圖像;

2、通過(guò)垂直投影對(duì)分割的每一行圖像進(jìn)行垂直分割,最終確定每一個(gè)字符的坐標(biāo)位置,分割出每一個(gè)字符;

先簡(jiǎn)單介紹一下投影法:分別在水平和垂直方向?qū)︻A(yù)處理(二值化)的圖像某一種像素進(jìn)行統(tǒng)計(jì),對(duì)于二值化圖像非黑即白,我們通過(guò)對(duì)其中的白點(diǎn)或者黑點(diǎn)進(jìn)行統(tǒng)計(jì),根據(jù)統(tǒng)計(jì)結(jié)果就可以判斷出每一行的上下邊界以及每一列的左右邊界,從而實(shí)現(xiàn)分割的目的。

下面通過(guò)Python+opencv來(lái)實(shí)現(xiàn)該功能

首先來(lái)實(shí)現(xiàn)水平投影:

import cv2

import numpy as np

 

'''水平投影'''

def getHProjection(image):

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

 #圖像高與寬

 (h,w)=image.shape 

 #長(zhǎng)度與圖像高度一致的數(shù)組

 h_ = [0]*h

 #循環(huán)統(tǒng)計(jì)每一行白色像素的個(gè)數(shù)

 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)

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

獲得每一行圖像之后,可以對(duì)其進(jìn)行垂直投影

def getVProjection(image):

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

 #圖像高與寬

 (h,w) = image.shape

 #長(zhǎng)度與圖像寬度一致的數(shù)組

 w_ = [0]*w

 #循環(huán)統(tǒng)計(jì)每一列白色像素的個(gè)數(shù)

 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_

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

下面是實(shí)現(xiàn)的全部代碼:

import cv2

import numpy as np

 

'''水平投影'''

def getHProjection(image):

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

 #圖像高與寬

 (h,w)=image.shape 

 #長(zhǎng)度與圖像高度一致的數(shù)組

 h_ = [0]*h

 #循環(huán)統(tǒng)計(jì)每一行白色像素的個(gè)數(shù)

 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

 #長(zhǎng)度與圖像寬度一致的數(shù)組

 w_ = [0]*w

 #循環(huán)統(tǒng)計(jì)每一列白色像素的個(gè)數(shù)

 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 = []

 #根據(jù)水平投影獲取垂直分割位置

 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

 #分割行,分割之后再進(jìn)行列分割并保存分割位置

 for i in range(len(H_Start)):

  #獲取行圖像

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

  #cv2.imshow('cropImg',cropImg)

  #對(duì)行圖像進(jìn)行垂直投影

  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

 #根據(jù)確定的位置分割字符

 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)

從分割的結(jié)果上看,基本上實(shí)現(xiàn)了圖片中文字的分割。但由于中文結(jié)構(gòu)復(fù)雜性,對(duì)于一些文字的分割并不理想,比如“葉”、“桃”等字會(huì)出現(xiàn)過(guò)度分割現(xiàn)象;對(duì)于有粘連的兩個(gè)字會(huì)出現(xiàn)分割不夠的現(xiàn)象,比如上圖中的“念想”。不過(guò)可以從圖像預(yù)處理(腐蝕),邊界判斷閾值的調(diào)整等方面進(jìn)行優(yōu)化。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Python中l(wèi)ambda排序的六種方法

    Python中l(wèi)ambda排序的六種方法

    本文主要介紹了Python中使用lambda函數(shù)進(jìn)行排序的六種方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2025-01-01
  • Python Unittest ddt數(shù)據(jù)驅(qū)動(dòng)的實(shí)現(xiàn)

    Python Unittest ddt數(shù)據(jù)驅(qū)動(dòng)的實(shí)現(xiàn)

    本文主要介紹了Python Unittest ddt數(shù)據(jù)驅(qū)動(dòng)的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02
  • PyTorch實(shí)現(xiàn)更新部分網(wǎng)絡(luò),其他不更新

    PyTorch實(shí)現(xiàn)更新部分網(wǎng)絡(luò),其他不更新

    今天小編就為大家分享一篇PyTorch實(shí)現(xiàn)更新部分網(wǎng)絡(luò),其他不更新,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-12-12
  • 利用python實(shí)現(xiàn)AR教程

    利用python實(shí)現(xiàn)AR教程

    今天小編就為大家分享一篇利用python實(shí)現(xiàn)AR教程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-11-11
  • Python3第三方模塊之Pillow模塊的使用詳解

    Python3第三方模塊之Pillow模塊的使用詳解

    這篇文章主要介紹了Python3第三方模塊之Pillow模塊的使用詳解,在 pillow之前處理圖形的庫(kù)莫過(guò)于PIL,但是它支持到python2.7,年久失修,于是一群志愿者在PIL的基礎(chǔ)上常見(jiàn)了pillow,支持python3,又豐富和功能特性,需要的朋友可以參考下
    2023-10-10
  • python中append函數(shù)用法講解

    python中append函數(shù)用法講解

    在本篇文章里小編給大家整理的是一篇關(guān)于python中append函數(shù)用法講解內(nèi)容,有興趣的朋友們可以學(xué)習(xí)下。
    2020-12-12
  • Python中的字符串常用方法整理概述

    Python中的字符串常用方法整理概述

    Python中的字符串是一種不可變的序列類(lèi)型,使用單引號(hào)(')或雙引號(hào)(")括起來(lái)。本文整理概述了python中字符串常用方法,文中有詳細(xì)的代碼示例,對(duì)學(xué)習(xí)或工作有一定的幫助,需要的同學(xué)可以參考一下
    2023-05-05
  • python實(shí)現(xiàn)指定字符串補(bǔ)全空格、前面填充0的方法

    python實(shí)現(xiàn)指定字符串補(bǔ)全空格、前面填充0的方法

    這篇文章主要介紹了python實(shí)現(xiàn)指定字符串補(bǔ)全空格、前面填充0的方法 ,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2018-11-11
  • python去除字符串中的空格、特殊字符和指定字符的三種方法

    python去除字符串中的空格、特殊字符和指定字符的三種方法

    本文主要介紹了python去除字符串中的空格、特殊字符和指定字符的三種方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02
  • tensorflow: 查看 tensor詳細(xì)數(shù)值方法

    tensorflow: 查看 tensor詳細(xì)數(shù)值方法

    今天小編就為大家分享一篇tensorflow: 查看 tensor詳細(xì)數(shù)值方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-06-06

最新評(píng)論

巴彦淖尔市| 石门县| 浪卡子县| 阿尔山市| 甘德县| 潼南县| 城固县| 利津县| 曲麻莱县| 铅山县| 红桥区| 泸溪县| 盈江县| 锡林浩特市| 墨江| 全椒县| 当雄县| 丽江市| 贵港市| 宁都县| 阳东县| 宝山区| 藁城市| 开江县| 砀山县| 拜城县| 栖霞市| 塘沽区| 宜城市| 大丰市| 白银市| 石嘴山市| 昭觉县| 冀州市| 绥江县| 二连浩特市| 霸州市| 夏津县| 措美县| 盐池县| 苗栗县|