文档章节

opencv+python 机读卡识别之试错(一)模板匹配的数字识别

Digimon
 Digimon
发布于 2017/07/09 20:24
字数 544
阅读 72
收藏 0

这里是效果不好的系列,但可能还是有丁点启示作用。效果好的系列:https://my.oschina.net/u/3268732/blog/1236298

图像来源于第四部分的数字,用任意截图工具截取部分图像当作模板,比如这样: 模板示例

将模板与图像对比,这个方法根据matchTemplate函数只能选出整幅图里最匹配的图像,并不能找出所有,若想找出所有,必须不断切割图片。单一图片识别方法:

#读入模板图片
template0=cv2.imread('E:\PyProgramma\pyImg\SummerTrain\source\img0\\1.jpg',0)
w, h = template.shape[::-1]
'''
matchTemplate函数参数选择:
'cv2.TM_CCOEFF', 'cv2.TM_CCOEFF_NORMED', 'cv2.TM_CCORR',  
'cv2.TM_CCORR_NORMED', '*cv2.TM_SQDIFF', '*cv2.TM_SQDIFF_NORMED'
后两个区别在于返回坐标信息不太一样
if method in [cv2.TM_SQDIFF, cv2.TM_SQDIFF_NORMED]:  
  top_left = min_loc  
else:  
  top_left = max_loc  
  bottom_right = (top_left[0] + w, top_left[1] + h)  
  cv2.rectangle(img,top_left, bottom_right, 255, 2) 
'''
res = cv2.matchTemplate(img, template, cv2.TM_CCORR_NORMED)
min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(res)
 # 左上角顶点
topleft = min_loc
# 右下角顶点
bottom_right = (topleft[0] + w, topleft[1] + h)
# 在图里绘制矩形
cv2.rectangle(img, topleft, bottom_right, (0, 0, 255), -1)
cv2.imshow('t',img)
cv2.waitKey(0)
print(topleft,bottom_right,min_val, max_val)

若想得到所有相似图片,则需要切图,像这样:

#testnumx存的是图像框框中竖线分割的横坐标
for i in range(len(testnumx)-1):
        #用来存储最大可能性
        pro=[]
        #对图像进行分割
        tempimg=img[y1num[0]:y1num[1],testnumx[i]:testnumx[i+1]]
        print(testnumx[i+1]-testnumx[i])
        #这里没写好,应该转成图像序列就对了……
        pro.append(templatematch(tempimg,template0))
        pro.append(templatematch(tempimg, template1))
        pro.append(templatematch(tempimg, template2))
        pro.append(templatematch(tempimg, template3))
        pro.append(templatematch(tempimg, template4))
        pro.append(templatematch(tempimg, template5))
        pro.append(templatematch(tempimg, template6))
        pro.append(templatematch(tempimg, template7))
        pro.append(templatematch(tempimg, template8))
        pro.append(templatematch(tempimg, template9))
        pro.append(templatematch(tempimg, templatex))
        #输出最有可能的数字
        print(pro.index(max(pro)))

这种方法做出来效果不太理想,可能模板加上边框会好些……方法很局限,可以用一个数字包含多个模板的方式来解决推广的问题,但随着模板数量的增加实际上已经变成了一种机器学习的方法……所以还不如直接机器学习……

© 著作权归作者所有

共有 人打赏支持
Digimon
粉丝 40
博文 18
码字总数 14810
作品 0
成都
程序员
私信 提问
北京中安未来电子护照阅读器(最新版本)

一、产品描述: 北京中安未来电子护照阅读器是一款外形轻巧美观的证件识读设备,它配备高清500万像素成像系统,采用TH-OCR技术可识别多种身份证件。可识读符合国际民航组织ICAO DOC 9303标准...

wenzuoyong123
04/23
0
0
关于机器识别或图像识别的问题求助?

把机读卡扫描成图片,通过对图片的处理,得到学生的得分。尽管有现成的机读卡,但是这个卡是定制的,所以只有通过自己做识别了,但是还没有思路,求大家集思广益。

小昭归来
2017/02/17
194
2
G20峰会 人脸识别三大技术--广州颜鉴信息科技

2016年百度世界大会开幕,其百度创始人李彦宏在会上发表了“人工智能”为主题的演讲,并推出最新产品“百度大脑”让参展人员眼前一亮,其图像识别能力非常突出,人脸识别概率已经高达97%;G...

colorreco
2016/09/12
0
0
浅谈RFID技术在电子巡更中的作用

“电子巡更机”,很多人都不太认识这个是什么? 那么对于电子技术专业的人来说,如果,说起“RFID” 可能就会认识。 今天我们来聊一聊,基于RFID技术的智能巡更系统。 我们都知道读卡技术中,...

英泽FCARD
06/20
0
0
OCR学习及tesseract的一些测试

最近接触OCR,先收集一些资料,包括成熟软件、SDK、流行算法。 1. 一个对现有OCR软件及SDK的总结,比较全面,包括支持平台、编程语言、支持字体语言、输出格式、相关链接等 http://en.wikipe...

狼人2007
2017/12/24
0
0

没有更多内容

加载失败,请刷新页面

加载更多

如何解决 homebrew 更新慢的问题

之前一直困扰于 Homebrew 的更新速度,曾试过修改更新源(清华、中科大等)的方式,但是并没什么卵用;也试过设置 curl 代理的方式,但是 brew 走的好像不是 curl 的方式,所以也没用。 通过...

whoru
13分钟前
0
0
TiDB EcoSystem Tools 原理解读系列(二)TiDB-Lightning Toolset 介绍

简介 TiDB-Lightning Toolset 是一套快速全量导入 SQL dump 文件到 TiDB 集群的工具集,自 2.1.0 版本起随 TiDB 发布,速度可达到传统执行 SQL 导入方式的至少 3 倍、大约每小时 100 GB,适合...

TiDB
15分钟前
0
0
【Visual Studio 扩展工具】如何在ComponentOneFlexGrid树中显示RadioButton

概述 在ComponentOne Enterprise .NET控件集中,FlexGrid表格控件是用户使用频率最高的控件之一。它是一个功能强大的数据管理工具,轻盈且灵动,以分层的形式展示数据(数据呈现更加直观)。...

葡萄城技术团队
17分钟前
0
0
Maven环境隔离

Maven环境隔离 1. 什么是Maven环境隔离 顾名思义,Maven环境隔离就是将开发中的环境与beat环境、生产环境分隔开,方便进行开发和维护。这个在实际项目中用的还是很多的,如果你的项目用的Mav...

蚂蚁-Declan
17分钟前
1
0
day182-2018-12-19-英语流利阅读-待学习

“性感”时代已去,维密将如何转身? Daniel 2018-12-19 1.今日导读 维多利亚的秘密(Victoria's Secret)这个内衣品牌,最近似乎步入了“中年危机”——曾经打遍天下的“性感”内衣,在主打...

飞鱼说编程
18分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部