'''
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)相关推荐

  1. 字符型图片验证码识别完整过程及Python实现

    1   摘要 验证码是目前互联网上非常常见也是非常重要的一个事物,充当着很多系统的 防火墙 功能,但是随时OCR技术的发展,验证码暴露出来的安全问题也越来越严峻.本文介绍了一套字符验证码识别的完整流程 ...

  2. python+opencv将表格图片按照表格框线分割、识别

    如下小程序为使用python+opencv将表格图片,按照表格进行分割,并识别分割后的子图片中的文字,希望对需要的小伙伴有一些些帮助.具体的实现见如下代码. # -*- coding: utf-8 - ...

  3. 基于 SoC 的卷积神经网络车牌识别系统设计(3-1)基于 Python 编程的车牌识别预处理、定位、分割、缩放的效果一览

    引言         这是一个在基于 OpenCV 的 Python 程序下,整体车牌定位.分割.识别的各个步骤的处理结果的展示,相当于算法的验证,只有先在软件上经过正确的严格的验证,才能进行硬件上的 ...

  4. 基于语义分割实现人脸图像的皱纹检测定位与分割

    前言 人脸皱纹主要区分有额纹.川字纹.眼下纹.法令纹.嘴角纹,眼角纹等,在美颜相机,智能医美等于应用领域里,需要对人脸皱纹进行检测.定位.分割,测量等. 传统图像算法的皱纹检测 1.传统算法的皱纹检测 ...

  5. 图像车牌识别(车牌定位与分割部分)

    图像车牌识别(车牌定位与分割部分) 图像车牌识别关键就是要从图像中准确地定位出车牌的位置,并将车牌部分的图像分割出来. 本文设计了一个简易的车牌识别识别系统,现介绍其车牌定位和分割部分. 在设计中我采 ...

  6. 转:目标检测定位与分割论文阅读心得总结:FCN U-Net R-CNN FR-CNN Faster R-CNN Mask R-CNN

    转载:https://blog.csdn.net/qq_28660035/article/details/78974319 目前,基于区域的方法主要分为两类:任务解耦和的RCNN[1]和任务高度耦合的 ...

  7. 【转】cs231n学习笔记-CNN-目标检测、定位、分割

    原文链接:http://blog.csdn.net/myarrow/article/details/51878004 1. 基本概念 1)CNN:Convolutional Neural Networ ...

  8. 深度学习(二十)基于Overfeat的图片分类、定位、检测

    基于Overfeat的图片分类.定位.检测 原文地址:http://blog.csdn.net/hjimce/article/details/50187881 作者:hjimce 一.相关理论 本篇博 ...

  9. python识图打怪_识别×图片、打飞机游戏,Python这些事你都知道吗?

    Python是挺神奇的. 可以做很多好玩的事情,今天就带大家看看,Python做的那些神奇好玩的事. 1.Python - Django 搭建简易博客 使用 Django 开发一个简单的博客 Web应 ...

最新文章

  1. Oracle控制文件恢复
  2. latex 下划线_Vim Latex 的使用和配置技巧 (三): 用 snippet 编辑 latex
  3. legend3---PHP使用阿里云短信服务
  4. 105从前序与中序遍历序列构造二叉树 106 从中序与后序遍历序列构造二叉树 (递归 + 哈希)
  5. linux部署项目文档,Linux上部署综合项目专业资料.doc
  6. 登录页面跳出框架的JS
  7. python实验九答案_Python实验九
  8. springboot(十二)-分布式锁(redis)
  9. 基于Matlab的跨孔电磁波\跨孔雷达的直射线追踪(一)
  10. php字符串分割汉字,php支持中文字符串分割的函数
  11. h5保存图片到手机_如何快速制作一个【H5】作品?
  12. android 同屏 软件,同屏助手安卓版
  13. win7下vs2017安装奋斗纠结过程
  14. 玩转IE之自动切换代理服务器
  15. 供应链金融与区块链的关系
  16. 蓝牙5.3 Core Spec演进与功能变化
  17. 我所经历的一次社会无赖中介的大考验,仅此记录,以介。(北京朝阳区黑中介杨沫)
  18. 你真懂吗?C++ 四种 cast 转换
  19. 图着色问题回溯法(最通俗易懂)
  20. ucenter base.php,UCenter之应用通信分析(一)

热门文章

  1. 查看android数据库sqlite3中的表及数据、手机上直接编辑数据库
  2. 计算机领域核心期刊 国际,计算机国际核心期刊
  3. 企业邮件注册,手机怎么注册邮箱?
  4. 日文键盘改中文键盘的方法
  5. bochs安装linux系统,Ubuntu 10.04安装Bochs 2.4.5笔记
  6. QT实现简单的2d游戏地图编辑器
  7. eclipse使用lombok注解不起作用
  8. UltraEdit使用技巧小结
  9. vue 做一个定点地图的页面(定位到你想要的地点)
  10. 21天学习挑战赛——Python爬虫 requests库