对图片字符进行定位及分割(python+cv2)
'''
Created on 2019年3月15日@author: Qiuyi
'''
from matplotlib import pyplot as plt
import numpy as np
import cv2rawimg = cv2.imread(r"D:\LearningFiles\splitCharactersOfPicture(python+cv2)\pyimagesplit1.jpg")
# rawimg = cv2.imread(r"D:\LearningFiles\splitCharactersOfPicture(python+cv2)\6E57.jpg")
fig = plt.figure(figsize=(10,15))
fig.add_subplot(2,3,1)
plt.title("raw image")
plt.imshow(rawimg)fig.add_subplot(2,3,2)
plt.title("grey scale image")
# 在处理之前,我们首先应该将图像去RGB,即在它对应的灰度图像上进行处理。
# 我们可以使用opencv python库中的cvtColor函数来实现到灰度图像的转换
grayscaleimg = cv2.cvtColor(rawimg,cv2.COLOR_BGR2GRAY)
plt.imshow(grayscaleimg,cmap='gray')# 然后,我们需要对图片进行归一化,这样可以减少最后分割出的数字中的噪声
# 这里我们采取了对每个像素减去图像总像素的平均数,并设置阈值50以下的像素归零来实现归一化
# 这样基本上背景像素就变成0了
grayscaleimg = grayscaleimg - int(np.mean(grayscaleimg))
grayscaleimg[grayscaleimg < 50] = 0# counting non-zero value by row , axis y
# 可以得到字符高的边界
row_nz = []
for row in grayscaleimg.tolist():row_nz.append(len(row) - row.count(0))
fig.add_subplot(2,3,3)
plt.title("non-zero values on y (by row)")
plt.plot(row_nz)# counting non-zero value by column, x axis
# 可以得到字符宽的边界,波形的波谷即间隔
col_nz = []
for col in grayscaleimg.T.tolist():col_nz.append(len(col) - col.count(0))
fig.add_subplot(2,3,4)
plt.title("non-zero values on y (by col)")
plt.plot(col_nz)##### start split
# first find upper and lower boundary of y (row)
fig.add_subplot(2,3,5)
plt.title("y boudary deleted")
upper_y = 0
# 遇到行不为0,即有数字时,记录行数
for i,x in enumerate(row_nz):if x != 0:upper_y = ibreak
lower_y = 0
for i,x in enumerate(row_nz[::-1]):if x!=0:lower_y = len(row_nz) - ibreak
sliced_y_img = grayscaleimg[upper_y:lower_y,:]
plt.imshow(sliced_y_img)# then we find left and right boundary of every digital (x, on column)
column_boundary_list = []
record = False
# list[:-1],slice all the list without the last one
for i,x in enumerate(col_nz[:-1]):# 寻找边界iif (col_nz[i] == 0 and col_nz[i+1] != 0) or col_nz[i] != 0 and col_nz[i+1] == 0:column_boundary_list.append(i+1)
img_list = []
# i是所有左边界,[i:i+2]切片得到每个字符的左右边界
xl = [ column_boundary_list[i:i+2] for i in range(0,len(column_boundary_list),2) ]
for x in xl:img_list.append(sliced_y_img[:,x[0]:x[1]] )# del invalid image
# 删去宽度不大于5像素的错误图片
img_list = [ x for x in img_list if x.shape[1] > 5 ]# show image
fig = plt.figure()
plt.title("x boudary deleted")
for i,img in enumerate(img_list):fig.add_subplot(3,4,i+1)plt.imshow(img)plt.imsave(r"C:\Users\Qiuyi\Desktop\%s.jpg"%i,img)plt.show()
参考
图像中的字符定位与分割(Python实现)
代码
链接:https://pan.baidu.com/s/1TTQAVqIoMp22_QM7aNsX3Q
提取码:811s
对图片字符进行定位及分割(python+cv2)相关推荐
- 字符型图片验证码识别完整过程及Python实现
1 摘要 验证码是目前互联网上非常常见也是非常重要的一个事物,充当着很多系统的 防火墙 功能,但是随时OCR技术的发展,验证码暴露出来的安全问题也越来越严峻.本文介绍了一套字符验证码识别的完整流程 ...
- python+opencv将表格图片按照表格框线分割、识别
如下小程序为使用python+opencv将表格图片,按照表格进行分割,并识别分割后的子图片中的文字,希望对需要的小伙伴有一些些帮助.具体的实现见如下代码. # -*- coding: utf-8 - ...
- 基于 SoC 的卷积神经网络车牌识别系统设计(3-1)基于 Python 编程的车牌识别预处理、定位、分割、缩放的效果一览
引言 这是一个在基于 OpenCV 的 Python 程序下,整体车牌定位.分割.识别的各个步骤的处理结果的展示,相当于算法的验证,只有先在软件上经过正确的严格的验证,才能进行硬件上的 ...
- 基于语义分割实现人脸图像的皱纹检测定位与分割
前言 人脸皱纹主要区分有额纹.川字纹.眼下纹.法令纹.嘴角纹,眼角纹等,在美颜相机,智能医美等于应用领域里,需要对人脸皱纹进行检测.定位.分割,测量等. 传统图像算法的皱纹检测 1.传统算法的皱纹检测 ...
- 图像车牌识别(车牌定位与分割部分)
图像车牌识别(车牌定位与分割部分) 图像车牌识别关键就是要从图像中准确地定位出车牌的位置,并将车牌部分的图像分割出来. 本文设计了一个简易的车牌识别识别系统,现介绍其车牌定位和分割部分. 在设计中我采 ...
- 转:目标检测定位与分割论文阅读心得总结:FCN U-Net R-CNN FR-CNN Faster R-CNN Mask R-CNN
转载:https://blog.csdn.net/qq_28660035/article/details/78974319 目前,基于区域的方法主要分为两类:任务解耦和的RCNN[1]和任务高度耦合的 ...
- 【转】cs231n学习笔记-CNN-目标检测、定位、分割
原文链接:http://blog.csdn.net/myarrow/article/details/51878004 1. 基本概念 1)CNN:Convolutional Neural Networ ...
- 深度学习(二十)基于Overfeat的图片分类、定位、检测
基于Overfeat的图片分类.定位.检测 原文地址:http://blog.csdn.net/hjimce/article/details/50187881 作者:hjimce 一.相关理论 本篇博 ...
- python识图打怪_识别×图片、打飞机游戏,Python这些事你都知道吗?
Python是挺神奇的. 可以做很多好玩的事情,今天就带大家看看,Python做的那些神奇好玩的事. 1.Python - Django 搭建简易博客 使用 Django 开发一个简单的博客 Web应 ...
最新文章
- Oracle控制文件恢复
- latex 下划线_Vim Latex 的使用和配置技巧 (三): 用 snippet 编辑 latex
- legend3---PHP使用阿里云短信服务
- 105从前序与中序遍历序列构造二叉树 106 从中序与后序遍历序列构造二叉树 (递归 + 哈希)
- linux部署项目文档,Linux上部署综合项目专业资料.doc
- 登录页面跳出框架的JS
- python实验九答案_Python实验九
- springboot(十二)-分布式锁(redis)
- 基于Matlab的跨孔电磁波\跨孔雷达的直射线追踪(一)
- php字符串分割汉字,php支持中文字符串分割的函数
- h5保存图片到手机_如何快速制作一个【H5】作品?
- android 同屏 软件,同屏助手安卓版
- win7下vs2017安装奋斗纠结过程
- 玩转IE之自动切换代理服务器
- 供应链金融与区块链的关系
- 蓝牙5.3 Core Spec演进与功能变化
- 我所经历的一次社会无赖中介的大考验,仅此记录,以介。(北京朝阳区黑中介杨沫)
- 你真懂吗?C++ 四种 cast 转换
- 图着色问题回溯法(最通俗易懂)
- ucenter base.php,UCenter之应用通信分析(一)