OpenCV 模板匹配


Posted in Python onJuly 10, 2019

最近小编实现一个微信小程序「跳一跳」的自动化。

主要涉及到了OpenCV的模板匹配和边缘检测技术,以及Android开发调试工具ADB。

如果放在一起说,感觉内容有些多。

所以,分三期来讲,也能多了解一些东西。

首先介绍模板匹配,然后边缘检测,最后结合ADB实现「跳一跳」自动化。

游戏虽然过时了,但是拿来练练手还是不错的。

编程就该是快乐的,哈哈。

/ 01 / 模板匹配

模板匹配,就是在整个图像区域里发现与给定子图像相匹配的小块区域。

这里需要一个模板图像(给定的子图像)和一个待检测的图像(原图像)。

在待检测图像上,从左向右,从上向下计算模板图像与重叠子图像的匹配度,匹配度越大,两者相同的可能性越大。

OpenCV 模板匹配

这里主要涉及OpenCV的cv2.matchTemplate()cv2.minMaxLoc()函数。

第一个函数作用是在模板和输入图像之间寻找匹配,获得匹配结果图像。

第二个函数的作用则是在给定的矩阵中寻找最大和最小值(包括它们的位置)。

其中模板匹配算法有以下六种。

# 第一类,利用平方差来进行匹配,最好匹配为0.匹配越差,匹配值越大
# 平方差匹配
method=CV_TM_SQDIFF
# 标准平方差匹配
method=CV_TM_SQDIFF_NORMED
# 第二类,采用模板和图像间的乘法操作,所以较大的数表示匹配程度较高,0标识最坏的匹配效果
# 相关匹配
method=CV_TM_CCORR
# 标准相关匹配
method=CV_TM_CCORR_NORMED
# 第三类,将模版对其均值的相对值与图像对其均值的相关值进行匹配,1表示完美匹配,-1表示糟糕的匹配,0表示没有任何相关性(随机序列)
# 相关系数匹配
method=CV_TM_CCOEFF
# 标准相关系数匹配
method=CV_TM_CCOEFF_NORMED

标准化意味着将数值统一到0~1。

除了平方差类型的是值越小越好,其他的都是值越大越好。

/ 02 / 图像检索

首先来看一下两张图像,都为灰度图。

import cv2
# 读取待检测图像
img = cv2.imread('game.png', 0)
# 读取模板图像
temple = cv2.imread('temple.png', 0)
# 显示灰度处理后的待检测图像
cv2.namedWindow('sample', 0)
cv2.resizeWindow('sample', 400, 600)
cv2.imshow('sample', img)
# 显示灰度处理后的模板图像
cv2.namedWindow('target', 0)
cv2.resizeWindow('target', 400, 600)
cv2.imshow('target', temple)

输出结果如下。

OpenCV 模板匹配

第一张为模板图像,第二张为待检测图像。

下面使用OpenCV的两个函数,来实现模板匹配。

# 获取模板图像的高和宽
th, tw = temple.shape[:2]
print(th, tw)
# 使用标准相关系数匹配,1表示完美匹配,-1表示糟糕的匹配,0表示没有任何相关性
result = cv2.matchTemplate(img, temple, cv2.TM_CCOEFF_NORMED)
# result为匹配结果矩阵
# print(result)
# TM_CCOEFF_NORMED方法处理后的结果图像
cv2.namedWindow('match_r', 0)
cv2.resizeWindow('match_r', 400, 600)
# 显示窗口
cv2.imshow('match_r', result)
# 使用函数minMaxLoc,确定匹配结果矩阵的最大值和最小值(val),以及它们的位置(loc)
min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(result)
# 此处选取最大值的位置,为图像的左上角
tl = max_loc
# 获取图像的右下角
br = (tl[0]+tw, tl[1]+th)
# 绘制矩形框
cv2.rectangle(img, tl, br, (0, 0, 255), 2)
# 设置显示窗口
cv2.namedWindow('match', 0)
cv2.resizeWindow('match', 400, 600)
# 显示窗口
cv2.imshow('match', img)
# 结束
cv2.waitKey(0)
cv2.destroyAllWindows()

输出结果如下。

OpenCV 模板匹配

第一张图中最白的位置,即代表着最高的匹配。

第二张图中,矩形框则代表着匹配到的结果。

通过矩形框的位置参数,结合模板图像的大小,便可得到小跳棋中心点位置(底部)。

/ 03 / 总结

现在既然能检测到「跳一跳」小跳棋的位置,那么下一步就是方块的位置啦。

Python 相关文章推荐
python 获取et和excel的版本号
Apr 09 Python
Python常见格式化字符串方法小结【百分号与format方法】
Sep 18 Python
利用python爬取散文网的文章实例教程
Jun 18 Python
python获取网页中所有图片并筛选指定分辨率的方法
Mar 31 Python
详解Python3.6的py文件打包生成exe
Jul 13 Python
在django admin中添加自定义视图的例子
Jul 26 Python
pytorch 加载(.pth)格式的模型实例
Aug 20 Python
python中如何实现将数据分成训练集与测试集的方法
Sep 13 Python
Django 实现将图片转为Base64,然后使用json传输
Mar 27 Python
基于python实现对文件进行切分行
Apr 26 Python
C++和python实现阿姆斯特朗数字查找实例代码
Dec 07 Python
Python用access判断文件是否被占用的实例方法
Dec 17 Python
8种用Python实现线性回归的方法对比详解
Jul 10 #Python
Python实现计算对象的内存大小示例
Jul 10 #Python
Python画图高斯分布的示例
Jul 10 #Python
使用Python实现跳一跳自动跳跃功能
Jul 10 #Python
windows安装TensorFlow和Keras遇到的问题及其解决方法
Jul 10 #Python
使用python对多个txt文件中的数据进行筛选的方法
Jul 10 #Python
Python 占位符的使用方法详解
Jul 10 #Python
You might like
php array_pop()数组函数将数组最后一个单元弹出(出栈)
2011/07/12 PHP
PHP FTP操作类代码( 上传、拷贝、移动、删除文件/创建目录)
2014/05/10 PHP
js加入收藏以及使用Jquery更改透明度
2014/01/26 Javascript
Node.js实现JS文件合并小工具
2016/02/02 Javascript
JS封装的三级联动菜单(使用时只需要一行js代码)
2016/10/24 Javascript
有趣的bootstrap走动进度条
2016/12/01 Javascript
vue.js事件处理器是什么
2017/03/20 Javascript
jQuery实现鼠标经过显示动画边框特效
2017/03/24 jQuery
Angularjs中ng-repeat的简单实例
2017/08/25 Javascript
基于jstree使用AJAX请求获取数据形成树
2017/08/29 Javascript
vue使用laydate时间插件的方法
2018/11/14 Javascript
Vue.js@2.6.10更新内置错误处机制Fundebug同步支持相应错误监控
2019/05/13 Javascript
微信浏览器左上角返回按钮监听的实现
2020/03/04 Javascript
vue中echarts引入中国地图的案例
2020/07/28 Javascript
[13:21]DOTA2国际邀请赛采访专栏:RSnake战队国士无双,Fnatic.Fly
2013/08/06 DOTA
python实现绘制树枝简单示例
2014/07/24 Python
Python and、or以及and-or语法总结
2015/04/14 Python
Python检测字符串中是否包含某字符集合中的字符
2015/05/21 Python
Python基于贪心算法解决背包问题示例
2017/11/27 Python
Python代码实现KNN算法
2017/12/20 Python
python解决js文件utf-8编码乱码问题(推荐)
2018/05/02 Python
用python统计代码行的示例(包括空行和注释)
2018/07/24 Python
python 穷举指定长度的密码例子
2020/04/02 Python
canvas学习总结三之绘制路径-线段
2019/01/31 HTML / CSS
法国奢华女性时尚配饰网上商店:Monnier Frères
2016/08/27 全球购物
英国豪华装饰照明品牌的在线零售商:Inspyer Lighting
2019/12/10 全球购物
环境工程大学生自荐信
2013/10/21 职场文书
军训鉴定表自我鉴定
2014/02/13 职场文书
护士自我鉴定总结
2014/03/24 职场文书
运输服务质量承诺书
2014/03/27 职场文书
公司请假条格式
2014/04/11 职场文书
优秀团干部个人事迹
2014/05/29 职场文书
2014大学生党员评议个人总结
2014/09/22 职场文书
2014年医院科室工作总结
2014/12/20 职场文书
台式电脑蓝牙适配器怎么安装?台式电脑蓝牙适配器安装教程
2022/04/08 数码科技
Linux磁盘管理方法介绍
2022/06/01 Servers