垂直投影法字符分割C语言,字符分割——投影法

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)`

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值