实现步骤:
站在用户的角度思考问题,与客户深入沟通,找到瑞安网站设计与瑞安网站推广的解决方案,凭借多年的经验,让设计与互联网技术结合,创造个性化、用户体验好的作品,建站类型包括:网站设计制作、网站设计、企业官网、英文网站、手机端网站、网站推广、国际域名空间、网站空间、企业邮箱。业务覆盖瑞安地区。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)