图片内数字的切分与识别,
数字识别最基本的只能一个一个的识别,但是有时我们会拿到一连串的数字图片,这个时候就需要我们进行切分开数字再进行识别
我的思路是吧图片二值化处理,数字的1其他是0
(1)一般流水号图片如下
我们需要进行切分,吧每一个数字切出来,进行识别再拼接
1.读取图片,进行灰度化处理
img=Image.open("图片路径")
image=img.convert("L")
plt.imshow(image)
2.图片灰度化以后,图片的数值还是在0-255之间,我们现在要定义大于某一个数值变为0,小于则变为1,把图片二值化
但是大于什么数值是最好的呢,我就去思索数学公式,发现了一个很神奇的公式: mean()-std()
平均值加减标准偏差表示的是单测量标准偏差与随机误差态布曲线作标准描述其离散程度。
A的值在A+和A-之间表示的是这一组数据相对于平均值a的离散程度,标准差b是离散程度的判定指标。
def picture_tow_valued(image):# 把图片转为numpy类型image_np=np.array(image)# 计算图片离散度discretization=image_np.mean()-image_np.std()discretization=int(discretization)# 循环图片上每一个点for i in range(image_np.shape[0]):for j in range(image_np.shape[1]):# 把大于离散度的数值变为0,小于的变为1,图片就变成了只有两个数值的黑白图片if image_np[i,j]>discretization:image_np[i,j]=0else:image_np[i,j]=1'''有些图片有瑕疵,边缘没有处理会影响切图,吧边缘数字全部变为0(黑色)'''for i in range(image_np.shape[0]):for j in range(image_np.shape[1]):if i == 0 or i == (image_np.shape[0]-1):image_np[i,j]=0continueif j == 0 or j == (image_np.shape[1]-1):image_np[i,j]=0continue# print(image_np)return image_np
不说多的,上效果图
这个效果我很满意,这个公式算出的二值化我测试了4,5个图片效果都很好,你们也可以试试,或是有更好的公式可以分享出来一起学习
3.下面就是主要部分了,切割图片
3.1我进行了2次切分先竖着切吧数字切开,再横着切保证只有数字在图像里面
3.2 因为现在是二值图片,数字的地方是1,其他地方是0,在python有一个函数any(),他可以判断一个列表里面是否全是0,如果全是0就返回FALSE,如果有1就返回TURE,依靠这个函数我们就可以吧数字都切出来
def cut_picture_rank(image):image0=[]image1=[]# 按照图片的列切for i in range(image.shape[1]):# 如果行全部是0就证明这一行没有数字if any(image[:,i]):image1.append(image[:,i])else:# 检测到数字的末尾if any(image[:,i-1]):image0.append(image1)image1=[]# list转numpy类型for i,j in enumerate(image0):image0[i]=np.array(j).Treturn image0def cut_picture_row(image):image0=[]image1=[]for z in image:# 按照图片的行切for i in range(z.shape[0]):# 如果行全部是0就证明这一行没有数字if any(z[i,:]):image1.append(z[i,:])else:# 检测到数字的末尾 并且高度要大于8 筛选出去一些躁点if any(z[i-1,:]) and len(image1)>8 :image0.append(image1)image1=[]for i,j in enumerate(image0):image0[i]=np.array(j)return image0
上效果图
完美
保存图片
def save_picture(image):j=0for i in image:plt.imsave("./image/%s.png" % (str(j)), i)j += 1
下面就可以进行数字识别了
我用的是knn手写数字识别,最后正确率70%,
knn手写数字博客很多,在这里我就不写了
下一次我将用pytorch试试准确率,有机会我会把我pytorch的代码发出来
哦!对了,最后提一下,这个函数不仅可以用于数字的切分,字符也是可以的哦,切出来自己识别
大家可以复制代码自己试一试,有什么疑问可以找我交流,一起学习
图片内数字的切分与识别,相关推荐
- 深度学习CTPN+CRNN模型实现图片内文字的定位与识别(OCR)
1:样本获取 **算法论文:** Synthetic Data for Text Localisation in Natural Images Github: https://github.com/a ...
- C# pdf 转图片 and 创建百度AI文字识别应用(识别图片中的文字和数字)
/// <summary>/// pdf 转图片/// </summary>public static void Turnpicture(){string str = &quo ...
- 手写数字的分割和识别
前言 在机器学习领域,手写数字数据集MNIST之于机器学习几乎相当于HelloWorld之于编程语言,其重要地位不言而已.但是,然后呢?给你一张如下所示的图片,你的模型能否也预测出结果?(其实下面这个 ...
- python识别数字程序_python实现识别手写数字 python图像识别算法
写在前面 这一段的内容可以说是最难的一部分之一了,因为是识别图像,所以涉及到的算法会相比之前的来说比较困难,所以我尽量会讲得清楚一点. 而且因为在编写的过程中,把前面的一些逻辑也修改了一些,将其变得更 ...
- CNN网络实现手写数字(MNIST)识别 代码分析
CNN网络实现手写数字(MNIST)识别 代码分析(自学用) Github代码源文件 本文是学习了使用Pytorch框架的CNN网络实现手写数字(MNIST)识别 #导入需要的包 import num ...
- Photoshop简单案例(6)——利用内容感知移动工具进行图片内物体位置移动
目录 一.项目介绍 二.基本流程 三.效果演示 一.项目介绍 内容感知移动工具是一个功能强大的工具,它能够快速地移动或复制你想要修改的部分.本文将利用内容感知移动工具进行图片内足球移动. 二.基本流程 ...
- 学习之路(二):按照图片内矩形框进行裁剪
OpenCV的使用 前言 一.OpenCV.图片二值化.图片的腐蚀膨胀学习 二.使用 1.引入库 2.读取图片 3.对图片进行腐蚀 4.获取矩形框 5.对图片进行裁剪 完整代码 三.最终效果 前言 最 ...
- python图片表格单元格切分
python图片表格单元格切分算法 切分思路 生成表格文件 寻找表格的范围和最小点 查找单元格 寻找坐标的行像素列像素 寻找点周围的单元格 切分思路 首先通过寻找轮廓线的方法找到最大的轮廓线,然后根据 ...
- 图片的手写文字如何识别?三招教你手写文字识别成文档
开学了,大大小小的考试将至.很多小伙伴复习的头晕脑胀的吧,特别是文科生,每天都要对着很多内容进行背诵,还得复习自己的笔记,但是记得比较匆忙随意就容易找不到重点去进行复习.这个时候就可以把笔记转换成文档 ...
最新文章
- 史上最浅显易懂的Git教程!
- Java常用四大线程池用法以及ThreadPoolExecutor详解
- 每日一皮:CPU的新用途,要不要试试?
- Bootstrap4+MySQL前后端综合实训-Day04-AM【新闻管理手机端页面+数据库操作(PowerDesigner 图形化数据库设计软件、SQLyog软件)】
- threadpoolexecutor底层实现原理
- redis-cli 命令详解
- iOS面试总结(待完善)
- asp.net获取当前页面的url地址
- winform 图片压缩大小为原图的一半_图片压缩指定大小?!这款神奇的工具有必要了解一下...
- Fenzo:来自Netflix基于Java语言的Mesos调度器
- c语言中为什么无法输入文件,Devc写C语言时无法输入文件内容
- 软件需求说明书/ 概要设计说明书/项目开发计划/详细设计说明书(说明要点及要点解释)
- Word2Vec与文章相似度
- alert转换成html,如何修改alert弹窗的具体样式?
- Arduino智能物流小车项目(MEGA2560)
- 肖秀荣、陆寓丰、徐涛三大名师的正确“打开方式”
- 叶小天的功课忙了许多
- 中小企业网上手机订货下单软件|移讯云订货通订单管理系统后台功能模块
- 说说漏洞检测的那些事儿
- IBM发布全新的POWER7系统