基于OpenCV(python)的实现文本分割之垂直投影法
作者:Keras深度学习 发布时间:2023-11-17 08:45:39
标签:OpenCV,垂直投影
在我的上一篇博客中讲述了水平投影法取出文本行图像的实现,在这里将用垂直投影法对文本行的每个字符进行分割。下图是用水平投影法切割的文本行:
文本分割的原理如下,先用水平投影取出单一文本行,接着使用垂直投影法达到对单个字符进行分割。
代码如下:
import numpy as np
import cv2
def get_vvList(list_data):
#取出list中像素存在的区间
vv_list=list()
v_list=list()
for index,i in enumerate(list_data):
if i>0:
v_list.append(index)
else:
if v_list:
vv_list.append(v_list)
#list的clear与[]有区别
v_list=[]
return vv_list
if __name__=='__main__':
img_bgr=cv2.imread('./testImg/2.png',1)
if not img_bgr is None:
img=img_bgr.copy()
img_gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
#二值化
t,binary=cv2.threshold(img_gray,0,255,cv2.THRESH_OTSU+cv2.THRESH_BINARY)
'''
垂直投影为从上往下投射,统计每一列的黑色像素总数
'''
rows,cols=binary.shape
ver_list=[0]*cols
for j in range(cols):
for i in range(rows):
if binary.item(i,j)==0:
ver_list[j]=ver_list[j]+1
'''
对ver_list中的元素进行筛选,可以去除一些噪点
'''
ver_arr=np.array(ver_list)
ver_arr[np.where(ver_arr<1)]=0
ver_list=ver_arr.tolist()
#绘制垂直投影
img_white=np.ones(shape=(rows,cols),dtype=np.uint8)*255
for j in range(cols):
pt1=(j,rows-1)
pt2=(j,rows-1-ver_list[j])
cv2.line(img_white,pt1,pt2,(0,),1)
cv2.imshow('垂直投影',img_white)
cv2.waitKey(0)
#切割单一字符
vv_list=get_vvList(ver_list)
for i in vv_list:
img_ver=img_bgr[:,i[0]:i[-1]]
cv2.imshow('单一字符',img_ver)
cv2.waitKey(0)
运行程序,垂直投影图像如下图所示:
分割的单一字符如下图:
单个数字已经正确分割出来了。
来源:https://blog.csdn.net/qq_37781464/article/details/113126450


猜你喜欢
- 一、构造函数 __init__ 与__new____new__ 作用: 创建对象,并分配内存__init__ 作用: 初始化对
- 本文实例讲述了python 正则表达式贪婪模式与非贪婪模式原理、用法。分享给大家供大家参考,具体如下:之前未接触过正则表达式,今日看pyth
- 引言:在Python3下运行Matplotlib之时,碰到了”No module named _tkinter“的问题,花费数小时进行研究解
- Sql server中常用的几个数据类型: binary 固定长度的二进制数据,其最大长度为 8,000 个字节。 varbinary 可变
- 打包下载Pain.php <?php class Pain { public $var=array(); public $tpl=ar
- 本文实例讲述了Python3爬虫学习之应对网站反爬虫机制的方法。分享给大家供大家参考,具体如下:如何应对网站的反爬虫机制在访问某些网站的时候
- 回文利用python 自带的翻转 函数 reversed()def is_plalindrome(string): return
- ASP长文章分页代码实例,也许你会问一篇文章为什么还要进行分页呢?因为文章有短有长,当你的文章很长的时候,如果就一个页面都显示出来的话,读者
- 用opencv处理一下pillow也可以,但是试过有时候会把图片自动旋转180°,cv没有这个问题import osfrom
- 会用到的库的1、selenium的webdriver2、tesserocr或者pytesseract进行图像识别3、pillow的Image
- 当前需求:有group和factor两张表,一个group对应多个factor,现在想查询有效的group和对应的有效的factor,两个表
- 1.首先在pycharm上使用pip安装pip install html-table pip install jira2.初始化发件人邮箱,
- 最近想备份网站,但是php下载文件的大小是有大小限制的,而我也懒得装ftp再下载了,就想着暂时弄个二级域名站,然后用python(pytho
- 内容摘要合理使用渐变留白网格布局提高字体应用明确而有效的导航设计漂亮、有用的页脚介绍优秀设计和卓越设计之间的区别是比较小的。一般人可能无法解
- PyTorch 中的 torch.utils.data 解析PyTorch 中的 torch.utils.data 解析在 PyTorch
- 1: os.listdir(path) //path为目录 功能相当于在path目录下执行dir命令,返回为list类型 print os.
- 1 运行SQLPLUS工具 sqlplus 2 以OS的默认身份连接 / as sysdba 3 显示当前用户名 show user 4 直
- Python 语言的优势在于其功能强大,可以用于网络数据采集、数据分析等各种应用场景。本篇文章将介绍如何使用 Python 获取网络数据、使
- __author__ = 'clownfish'#coding:utf-8import urllib2,urllib,coo
- 程序运算时往往需要数据,而数据的IO又往往需要时间传输,而常见的串行处理,是一个任务处理完成才接着处理新的任务, 其效率低下可想而知。 假如