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

作者:Keras深度学习 时间:2023-11-17 08:45:39 

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

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

文本分割的原理如下,先用水平投影取出单一文本行,接着使用垂直投影法达到对单个字符进行分割。

代码如下:

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)

运行程序,垂直投影图像如下图所示:

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

分割的单一字符如下图:

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

单个数字已经正确分割出来了。

来源:https://blog.csdn.net/qq_37781464/article/details/113126450

标签:OpenCV,垂直投影
0
投稿

猜你喜欢

  • python 点云地面点滤波-progressive TIN densification(PTD)算法介绍

    2023-05-26 17:50:55
  • python实现支付宝当面付(扫码支付)功能

    2023-04-01 21:38:45
  • django认证系统 Authentication使用详解

    2021-10-02 19:05:07
  • Tensorflow 多线程设置方式

    2021-09-29 21:53:50
  • 详解Python读取配置文件模块ConfigParser

    2022-02-25 09:05:23
  • 一文带你了解Go语言实现的并发神库conc

    2024-05-13 10:43:22
  • python 实现按对象传值

    2023-05-26 14:20:18
  • js调用AJAX时Get和post的乱码解决方法

    2024-05-09 10:38:11
  • pytorch实现textCNN的具体操作

    2022-08-28 17:40:00
  • Python OpenCV Hough直线检测算法的原理实现

    2021-01-29 10:10:00
  • Laravel配置全局公共函数的方法步骤

    2023-11-15 01:20:42
  • Node.js中环境变量process.env的一些事详解

    2024-05-13 09:28:41
  • 浅谈MySQL模糊查询中通配符的转义

    2024-01-26 06:51:57
  • Python数据可视化教程之Matplotlib实现各种图表实例

    2021-08-19 01:18:10
  • Python pickle模块用法实例

    2022-06-30 10:29:04
  • 原生JS实现弹幕效果的简单操作指南

    2024-04-22 22:31:20
  • mysql查询条件not in 和 in的区别及原因说明

    2024-01-27 12:41:49
  • 用javascript实现的支持lrc歌词的播放器

    2024-04-10 14:03:33
  • Mysql的MERGE存储引擎详解

    2024-01-25 22:26:49
  • numpy.ndarray 实现对特定行或列取值

    2022-05-14 09:17:24
  • asp之家 网络编程 m.aspxhome.com