基于投影的图像文字分割 - python

标签: 图像文字分割 python 投影
17人阅读 评论(1) 收藏 举报
分类:

环境

python 3.6
python-opencv 3.4.0

思路

对图片进行水平方向投影,得到每一行文字的起止线
对每一行文字进行竖直方向投影,若有连续的像素满足条件,则为一个字,进行分割

代码

import cv2
import numpy as np

path = 'd:\\testdata\\test\\bin1.png'
root = 'd:\\testdata\\test\\'
dsize = 28 #归一化处理的图像大小
img = cv2.imread(path)
data = np.array(img)
len_x = data.shape[0] 
len_y = data.shape[1]
min_val = 10 #设置最小的文字像素高度,防止切分噪音字符

start_i = -1
end_i = -1
rowPairs = [] #存放每行的起止坐标

#行分割
for i in range(len_x):
    if(not data[i].all() and start_i < 0): 
        start_i = i
    elif(not data[i].all()):
        end_i = i
    elif (data[i].all() and start_i >= 0):
        #print(end_i - start_i)
        if(end_i - start_i >= min_val):
            rowPairs.append((start_i, end_i))
        start_i, end_i = -1, -1

#print(rowPairs)

#列分割
start_j = -1
end_j = -1
min_val_word = 5  #最小文字像素长度
number = 0 #分割后保存编号
for start, end in rowPairs:
    for j in range(len_y):
        if(not data[start: end, j].all() and start_j < 0):
            start_j = j
        elif(not data[start: end, j].all()):
             end_j = j
        elif(data[start: end, j].all() and start_j >= 0):
            if(end_j - start_j >= min_val_word):
                #print(end_j - start_j)
                tmp = data[start:end, start_j: end_j]
                im2save = cv2.resize(tmp, (dsize,dsize)) #归一化处理
                cv2.imwrite(root + '%d.png' % number, im2save) 
                number += 1
                #print("%d  pic" % number)
            start_j, end_j = -1, -1

结果

分割前:

这里写图片描述

分割后:

总揽:

这里写图片描述

单例:

这里写图片描述

效果还行

查看评论

第10周:卷积神经网络分割任务

-
  • 1970年01月01日 08:00

基于水平投影,垂直投影的字符图像分割思路和代码实现

首先介绍算法思路: matlab代码实现: python代码实现: java代码实现:
  • u010910436
  • u010910436
  • 2014-10-23 16:17:40
  • 6911

Python实现投影法分割图像(一)

投影法多用于图像的阈值分割。闲话不多说,现用Python实现。上代码。import cv2 import numpy img = cv2.imread('D:/0.jpg', cv2.COLOR_BG...
  • TIME_LEAF
  • TIME_LEAF
  • 2018-02-26 09:27:40
  • 315

opencv 垂直投影分割字符

原图: #include "opencv2/imgproc/imgproc.hpp" #include "opencv2/highgui/highgui.hpp" #include #includ...
  • lcalqf
  • lcalqf
  • 2017-05-05 10:42:43
  • 2901

基于投影的字符版面分析java代码

首先介绍算法思路:图像对应方向的投影,就是在该方向取一条直线,统计垂直于该直线(轴)的图像上的像素的黑点数量,累加求和作为该轴该位置的值;基于图像投影的切割就是将图像映射成这种特征后,基于这种特征判定...
  • u010910436
  • u010910436
  • 2015-06-18 11:20:17
  • 778

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

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

利用投影法进行字符分割

目录(?)[+] 1.概述 字符分割有很多方法,但并不是每一种方法是万能的,那么就需要根据自己的需要来分析。例如:我现在项目的需求是将一串编号给切分开来。查了网上的资料和文献,...
  • hktkfly6
  • hktkfly6
  • 2017-04-10 07:05:46
  • 2126

【OpenCV】利用投影法进行字符分割

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

Python 对图片做垂直投影

Python 对图片做垂直投影本文利用opencv对图片进行垂直投影,做出垂直投影图,大体思路:打开图片,灰度化,二值化,按列进行统计,新建一个大小和原图一样的图片,按列进行填充: cv2.cv.Ge...
  • daqinjun
  • daqinjun
  • 2017-12-27 20:19:37
  • 646

车牌字符分割垂直投影切分matlab程序

  • 2015年05月18日 14:45
  • 2KB
  • 下载
    个人资料
    持之以恒
    等级:
    访问量: 2万+
    积分: 510
    排名: 10万+
    最新评论