对于如下一张图片,如何将文本区域分割成一行一行的了?

在文本分割领域中有一种很优秀的算法:投影法,包括水平投影法和垂直投影法。本文主要讲述水平投影法,水平投影法可以理解为一束光线从图像的左侧向右边进行照射,每一条光线可以理解为图像的一行,计算每一行上图像的黑色像素点,从而可以对图像进行分割。

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_listif __name__=='__main__':img_bgr=cv2.imread('./testImg/1.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.shapehor_list=[0]*rowsfor i in range(rows):for j in range(cols):#统计每一行的黑色像素总数if binary.item(i,j)==0:hor_list[i]=hor_list[i]+1'''对hor_list中的元素进行筛选,可以去除一些噪点'''hor_arr=np.array(hor_list)hor_arr[np.where(hor_arr<5)]=0hor_list=hor_arr.tolist()#绘制水平投影img_white=np.ones(shape=(rows,cols),dtype=np.uint8)*255for i in range(rows):pt1=(cols-1,i)pt2=(cols-1-hor_list[i],i)cv2.line(img_white,pt1,pt2,(0,),1)cv2.imshow('水平投影',img_white)cv2.waitKey(0)#取出各个文字区间vv_list=get_vvList(hor_list)for i in vv_list:img_hor=img_bgr[i[0]:i[-1],:,:]cv2.imshow('文本行',img_hor)cv2.waitKey(0)

运行上述代码,可以看到水平投影的效果。

根据投影法的特征,可以很容易就将上述文本分割成文本行,如下图所示:

文本分割之水平投影法基于OpenCV(python)版实现相关推荐

  1. 文本分割之垂直投影法基于OpenCV(python)的实现

    在我的上一篇博客中讲述了水平投影法取出文本行图像的实现,在这里将用垂直投影法对文本行的每个字符进行分割.下图是用水平投影法切割的文本行: 文本分割的原理如下,先用水平投影取出单一文本行,接着使用垂直投 ...

  2. 基于 OpenCV + Python 的人脸识别上课签到系统

    目录 前言 安装第三方库 第一步:采集人脸图像 (1)修改姓名学号 (2)运行capture_face.py (3)采集人脸图像 (4)查看采集到的人脸图像 第二步:训练模型 第三步:识别签到 (1) ...

  3. opencv java水平投影_使用OpenCv中Mat进行水平投影与垂直投影并实现字符切分

    由于要做图像的处理,所以最近在学习Opencv的相关知识,学习了Opencv中的Mat对象,查阅了网上的资料,了解了相关知识.现在实现了一个使用Mat对象来进行图像的水平投影与垂直投影,并在此基础之上 ...

  4. 投影法字符分割matlab,利用投影法进行字符分割

    1.概述 字符分割有很多方法,但并不是每一种方法是万能的,那么就需要根据自己的需要来分析.例如:我现在项目的需求是将一串编号给切分开来.查了网上的资料和文献,大致适合项目的有两种方法:投影分割法和连通 ...

  5. OpenCV2.4.13 文本分割(水平垂直,直方图投影)

    进行文字分割时,有多种方法,对与不同情况可以分别处理. 问题1:如何进行文字分割? 答:对于文字是一般正规(不同行的文字一样高,每一行内部文字大致一样宽)的文本的情况. 这里给出了一种方法. 1)对图 ...

  6. 基于opencv+python实现数独

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 效果展示图 一.引入库 二.训练KNN模型 三.读取数独图片并提取轮廓 四.提取9*9的81小方格 五.解析数独数字 ...

  7. 基于opencv+python的角度测量

    import cv2 # 导入opencv import math # 导入math库,计算角度时需要path = './Angle Finder/background.png' # 测试样图相对路径 ...

  8. 基于Opencv+python的车流量检测项目

    目录 项目介绍 整体流程 调试环境 项目流程 1.预处理 2.汽车识别--去背景算法(KNN/MOG2) 3.统计车流量数目 结尾 源代码 测试视频资料 流程图 项目介绍 本次项目主要采用了传统视觉的 ...

  9. 基于opencv+python的车道检测技术

    针对自动驾驶系统的实际需求,我们需要一种能够兼顾速度.不同环境下高检测成功率和鲁棒性的车道识别算法.首先,因为停车场更多的是地下光线昏暗的情况需要提高车道线与周围环境的对比度,然后灰度化图像进行模糊降 ...

最新文章

  1. 找工作?该复习了!(转)
  2. RabbitMQ 的引言
  3. 深入了解Token认证的来龙去脉
  4. linux系统部署静态网站,Linux笔记15 使用Apache服务部署静态网站。
  5. .Net Core In Docker 在容器内编译并发布
  6. Android studio提示Android Gradle plugin requires Java 11 to run. You are currently using Java 1.8.
  7. oracle 索引字典,oracle数据字典、索引、序列
  8. 单体应用微服务改造实践
  9. 【图灵学院01】Java程序员开发效率工具IntelliJ IDEA使用
  10. Nuget私有服务搭建实战
  11. 全球人工智能发展白皮书
  12. 什么是OGNL表达式
  13. 如意淘商品推荐技术介绍之一:基础推荐
  14. 近红外光谱建模之区间偏最小二乘法python实现(ipls算法)
  15. 局域网架设 NOD 32 镜像更新服务器
  16. 创建维基百科,编辑维基百科的四个技巧
  17. 第十一届“蓝狐网络杯”湖南省大学生计算机程序设计竞赛 B - 大还是小? 字符串水题...
  18. 脚本小子进阶笔记1-windows基础
  19. 数字锁相ud,uq的关系
  20. SpringBoot 中dependencies飘红

热门文章

  1. 用java实现简单绘图
  2. JavaDay29 CSS
  3. 产品引流的方式有哪些?适合引流推广的平台有哪些?
  4. 在微信小程序中,如果自动获取用户所在的省市地区?
  5. [vue-router] Named Route ‘Home‘ has a default child route. When navigating to this named route....
  6. 华纳云告知您,企业上云的十大优势
  7. ios小米手环6最新固件获取auth_key更换第三方表盘
  8. 【SQL Server 还原数据库】:因为数据库正在使用,所以无法获得对数据库的独占访问权
  9. 华硕笔记本bios U盘启动问题
  10. EPICS -- synApps -- Autosave