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统计文本字符串里单词出现频率的方法
May 26 Python
Python利用前序和中序遍历结果重建二叉树的方法
Apr 27 Python
python模仿网页版微信发送消息功能
Feb 24 Python
flask框架视图函数用法示例
Jul 19 Python
PyCharm代码提示忽略大小写设置方法
Oct 28 Python
Python 列表的清空方式
Jan 13 Python
使用Keras中的ImageDataGenerator进行批次读图方式
Jun 17 Python
Pycharm连接gitlab实现过程图解
Sep 01 Python
Python 实现国产SM3加密算法的示例代码
Sep 21 Python
用Python简陋模拟n阶魔方
Apr 17 Python
Python数据分析之pandas函数详解
Apr 21 Python
Pytorch中的数据集划分&正则化方法
May 27 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实现批量压缩图片文件大小的脚本
2014/07/04 PHP
PHP链接MySQL的常用扩展函数
2014/10/23 PHP
基于GD2图形库的PHP生成图片缩略图类代码分享
2015/02/08 PHP
php自定义扩展名获取函数示例
2016/12/12 PHP
PHP 传输会话curl函数的实例详解
2017/09/12 PHP
PHP判断函数是否被定义的方法
2019/06/21 PHP
onpropertypchange
2006/07/01 Javascript
在线游戏大家来找茬II
2006/09/30 Javascript
脚本吧 - 幻宇工作室用到js,超强推荐base.js
2006/12/23 Javascript
JS实现self的resend
2010/07/22 Javascript
jquery异步调用页面后台方法‏(asp.net)
2011/03/01 Javascript
js分解url参数(面向对象-极简主义法应用)
2012/08/09 Javascript
js实现常用排序算法
2016/08/09 Javascript
javascript经典特效分享 手风琴、轮播图、图片滑动
2016/09/14 Javascript
JavaScript关联数组用法分析【概念、定义、遍历】
2017/03/15 Javascript
解决ionic和angular上拉加载的问题
2017/08/03 Javascript
JS实现自定义弹窗功能
2018/08/08 Javascript
深入理解 ES6中的 Reflect用法
2020/07/18 Javascript
vue data对象重新赋值无效(未更改)的解决方式
2020/07/24 Javascript
python模拟登录百度贴吧(百度贴吧登录)实例
2013/12/18 Python
Python利用pyHook实现监听用户鼠标与键盘事件
2014/08/21 Python
Python3 模块、包调用&路径详解
2017/10/25 Python
Python绘制3d螺旋曲线图实例代码
2017/12/20 Python
浅谈Python traceback的优雅处理
2018/08/31 Python
Python3实现的简单工资管理系统示例
2019/03/12 Python
python使用sklearn实现决策树的方法示例
2019/09/12 Python
python 实现目录复制的三种小结
2019/12/04 Python
python groupby 函数 as_index详解
2019/12/16 Python
html5 浏览器支持 如何让所有的浏览器都支持HTML5标签样式
2012/12/07 HTML / CSS
html5 利用重力感应实现摇一摇换颜色可用来做抽奖等等
2014/05/07 HTML / CSS
让生命充满爱演讲稿
2014/05/10 职场文书
预备党员自我批评思想汇报
2014/10/10 职场文书
领导班子群众路线与四风问题对照检查材料思想汇报
2014/10/11 职场文书
范文之农村基层党建工作报告
2019/10/24 职场文书
Python基于百度API识别并提取图片中文字
2021/06/27 Python
python lambda 表达式形式分析
2022/04/03 Python