牛奶盒喷码字符识别(基于opencv)————(三)字符的识别

  • 更新
  • 效果
  • 方法
    • 1.制作模板
    • 2.读入模板,
    • 3.读入分割出来的图片
    • 4.逐一匹配
  • 不足

更新

2018.11.16:

效果

先看效果吧。



效果极佳,

方法

1.制作模板

将分割出来的数字,效果很不错的当作我们的模板,后面用作匹配,C L :都当作数字处理

2.读入模板,

这里我通过建立三维数组,采用for循环读入
注意,读取时候,要加0参数,不然会以三通道方式读取。

templatepath="C:\\Users\\mechrevo\\Desktop\\template\\" #模板
template=np.zeros([dsize,dsize,13],np.uint8) #注意uint8为1通道,默认为 3通道
for i in range(13):#print(i)template[:,:,i] = cv2.imread(templatepath + "%d.png" %i, 0)

3.读入分割出来的图片

将上一节分割出来的20张图片,都读入进去,同样构建三维数组,for循环读入

img=np.zeros([dsize,dsize,20],np.uint8)
for i in range(20):# print(i)img[:,:,i] = cv2.imread(root + "%d.png" %i, 0) #记住参数 0 #cv2.imshow("s"+ "%d" %i, img[:,:,i])

4.逐一匹配

采用嵌套for循环,使得每个分割的图像与模板匹配,算出来的rez值最大的,就是最有可能的字符,这里采用cv2.TM_CCOEFF_NORMED标准相关匹配方法,这是 OpenCV 支持的最复杂的一种相似度算法。这里的相关运算就是数理统计学科的相关系数计算方法。
总之,越复杂,占用cpu越多,越耗时,但是越准确。

res=np.zeros([13],np.float16)for i in range(20):for j in range(13):res[j] = cv2.matchTemplate(img[:,:,i],template[:,:,j],cv2.TM_CCOEFF_NORMED) #注意逻辑maxindex  = np.argmax(res)    if (maxindex<10 and maxindex >=0): print(maxindex)elif (maxindex == 10):print("C")elif (maxindex == 11):print("L")elif (maxindex == 12):print(":")
#print(res)


看看谁最大,使用np.argmax直接得出答案,在等于10,11,12加入判断即可
效果如顶部那样,统计了50张图,也就是1000个数字,准确率为95.2%

不足

当然算法还有一些不足之处:
比如:
1.如果字符不为20的话,算法会出错,只不过我的数据集90%的图都是20个字符的,要改进,可以使用文件操作相关函数
2.对于0和8,或扭曲数字,很容易出错,有机会我会尝试卷积神经网络。
3.对于一些扭曲的图片,两行直接没有白色像素,有很小几率会无法切割行。

总之,这只是一门选修课,我也不愿太费心思去继续改进,有什么问题可以评论区交流.
等结课后公布完整代码,供大家学习交流。

牛奶盒喷码字符识别(基于opencv)————(三)字符的识别相关推荐

  1. 数字识别java开源_Java基于opencv实现图像数字识别(三)—灰度化和二值化

    Java基于opencv实现图像数字识别(三)-灰度化和二值化 一.灰度化 灰度化:在RGB模型中,如果R=G=B时,则彩色表示灰度颜色,其中R=G=B的值叫灰度值:因此,灰度图像每个像素点只需一个字 ...

  2. 基于 OpenCV + Python 的人脸识别上课签到系统

    目录 前言 安装第三方库 第一步:采集人脸图像 (1)修改姓名学号 (2)运行capture_face.py (3)采集人脸图像 (4)查看采集到的人脸图像 第二步:训练模型 第三步:识别签到 (1) ...

  3. Java基于opencv实现图像数字识别(一),java开发面试笔试题

    我总结出了很多互联网公司的面试题及答案,并整理成了文档,以及各种学习的进阶学习资料,免费分享给大家. 扫描二维码或搜索下图红色VX号,加VX好友,拉你进[程序员面试学习交流群]免费领取.也欢迎各位一起 ...

  4. 基于OpenCV自带分类器识别人脸

    基于OpenCV自带分类器识别人脸 在VS2019下要安装适用于桌面的VC++ 2015(2017) v14 00(v14)工具集. 访问网站:https://visualstudio.microso ...

  5. 【优秀课设】基于OpenCV的Python人脸识别、检测、框选(遍历目录下所有照片依次识别 视频随时标注)

    基于OpenCV的Python人脸识别.检测.框选 (遍历目录下所有照片依次识别 视频随时标注) 移步: https://blog.csdn.net/weixin_53403301/article/d ...

  6. 【毕业设计/课程设计】基于opencv的高精度人脸识别考勤系统设计与实现

    文章目录 0 项目说明 1 需求分析 2 总体设计 3 详细设计 4 程序运行结果测试与分析 5 实验心得 6 项目源码 0 项目说明 基于opencv的高精度人脸识别考勤系统设计与实现 提示:适合用 ...

  7. Java基于opencv实现图像数字识别(一)

    Java基于opencv实现图像数字识别(一) 最近分到了一个任务,要做数字识别,我分配到的任务是把数字一个个的分开:当时一脸懵逼,直接百度java如何分割图片中的数字,然后就百度到了用Buffere ...

  8. 调用笔记本的摄像头实现基于opencv的视频人脸识别(中文显示和英文显示)以及 index 480 is out of bounds for axis 0 with size 480错误的解决

    @人脸识别代码和一些常见错误 基于opencv的视频人脸识别(中文显示)以及 index 480 is out of bounds for axis 0 with size 480错误的解决 参考了 ...

  9. java图片降噪_Java基于opencv实现图像数字识别(四)—图像降噪

    Java基于opencv实现图像数字识别(四)-图像降噪 我们每一步的工作都是基于前一步的,我们先把我们前面的几个函数封装成一个工具类,以后我们所有的函数都基于这个工具类 这个工具类呢,就一个成员变量 ...

  10. Python基于OpenCV的人脸表情识别系统[源码&部署教程]

    1.项目背景 人脸表情识别是模式识别中一个非常重要却十分复杂的课题.首先对计算机人脸表情识别技术的研究背景及发展历程作了简单回顾.然后对近期人脸表情识别的方法进行了分类综述.通过对各种识别方法的分析与 ...

最新文章

  1. C++ sizeof 操作符的用法总结
  2. 怎么用python统计字数_使用Python 统计高频字数的方法
  3. Expected image (JPEG, PNG, or GIF), got empty file
  4. hdu2433 spfa+mark[x][u][v]优化
  5. java复制两个对象报异常_Java中复制两个不同类的对象的属性
  6. numpy.argmax详解
  7. linux用户及权限操作
  8. Swift的笔记和参考
  9. python3调用arcpy地理加权回归_多元地理加权回归软件使用和含义
  10. 科普│串联质谱分析仪(ESI离子源)之离子阱质谱仪
  11. 基于最大子覆盖问题的文本摘要实验
  12. phabricator 结合 arcanist 使用
  13. 全球与中国大麻化妆品市场深度研究分析报告
  14. 无迹卡尔曼滤波UKF_代码及调参(2)
  15. shell脚本:exit和return
  16. 申宝投资-指数上周五中阴杀跌
  17. 拉钩参数加密过程:data
  18. CSUST 2007 我爱吃烧烤 题解(状压dp)
  19. 向日葵在mac不能以服务器运行吗,使用向日葵软件实现mac远程桌面连接windows的步骤...
  20. 求给定范围内的所有质数

热门文章

  1. sap abap开发从入门到精通_给你的ABAP对象打上标签(Tag)
  2. java基于SSM房屋租赁管理系统
  3. php导出excel例子,php使用原生的方法导出excel实例分享
  4. coolpad手机量身打造的刷机工具--下载助手_V2.2.4(Mini_AD_Coolpad)
  5. 互联网创新创业大赛优秀范例_【互联网+大学生创新创业大赛项目计划书】创新创业大赛作品范例...
  6. 苹果服务器消息转发,好消息!微信语音也可以转发啦!不好的消息!目前苹果还不行!...
  7. 博弈论概述 (转自百度百科)
  8. Anaconda下载安装Pytorch遇到的几个问题及解决办法
  9. abaqus单位问题
  10. 民企信息化建设个人经历(一)