Python实现投影法分割图像示例(一)
投影法多用于图像的阈值分割。闲话不多说,现用Python实现。
上代码。
importcv2 importnumpy 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 #垂直投影 #统计并存储每一列的黑点数 forxinrange(0,width): foryinrange(0,height): ifclosed[y,x][0]==0: a=a+1 else: continue v[x]=a a=0 l=len(v) #printl #printwidth #创建空白图片,绘制垂直投影图 emptyImage=numpy.zeros((height,width,3),numpy.uint8) forxinrange(0,width): foryinrange(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) foryinrange(0,height): forxinrange(0,width): ifclosed[y,x][0]==0: a=a+1 else: continue z[y]=a a=0 l=len(z) #printl #printheight #绘制水平投影图 foryinrange(0,height): forxinrange(0,z[y]): b=(255,255,255) emptyImage1[y,x]=b cv2.imshow('shuipin',emptyImage1) cv2.waitKey(0)
原图
垂直投影图
水平投影图
由这两图可以确定我们所需的分割点,从而可以进行下一步的文本分割。这将在下一篇博客中实现。
以上这篇Python实现投影法分割图像示例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。