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 相关文章推荐
python3使用tkinter实现ui界面简单实例
Jan 10 Python
Python 中的 else详解
Apr 23 Python
Python彩色化Linux的命令行终端界面的代码实例分享
Jul 02 Python
Python的多维空数组赋值方法
Apr 13 Python
Python基于百度AI的文字识别的示例
Apr 21 Python
在pycharm上mongodb配置及可视化设置方法
Nov 30 Python
Python装饰器用法实例分析
Jan 14 Python
python 利用pandas将arff文件转csv文件的方法
Feb 12 Python
Django模板导入母版继承和自定义返回Html片段过程解析
Sep 18 Python
Python 函数用法简单示例【定义、参数、返回值、函数嵌套】
Sep 20 Python
jupyter notebook 增加kernel教程
Apr 10 Python
Python中文纠错的简单实现
Jul 07 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利用COM对象访问SQLServer、Access
2006/10/09 PHP
PHP定时更新程序设计思路分享
2014/06/10 PHP
PHP对文件进行加锁、解锁实例
2015/01/23 PHP
PHP错误Warning:mysql_query()解决方法
2015/10/24 PHP
thinkphp框架实现删除和批量删除
2016/06/29 PHP
图片自动缩小 点击放大
2008/07/07 Javascript
用jquery设置按钮的disabled属性的实现代码
2010/11/28 Javascript
jQuery实现仿路边灯箱广告图片轮播效果
2015/04/15 Javascript
jquery的ajax提交form表单的两种方法小结(推荐)
2016/05/25 Javascript
js闭包用法实例详解
2016/12/13 Javascript
javascript删除html标签函数cIsHTML
2017/01/09 Javascript
Vue项目全局配置页面缓存之按需读取缓存的实现详解
2018/08/01 Javascript
详解Vue CLI 3.0脚手架如何mock数据
2018/11/23 Javascript
小程序开发中如何使用async-await并封装公共异步请求的方法
2019/01/20 Javascript
jQuery实现左右两个列表框的内容相互移动功能示例
2019/01/27 jQuery
vue-cli3环境变量与分环境打包的方法示例
2019/02/18 Javascript
小程序实现上传视频功能
2020/08/18 Javascript
vue v-on:click传递动态参数的步骤
2020/09/11 Javascript
H5 js点击按钮复制文本到粘贴板
2020/11/19 Javascript
python 文件操作api(文件操作函数)
2016/08/28 Python
Python实现购物车购物小程序
2018/04/18 Python
Python算法中的时间复杂度问题
2019/11/19 Python
在主流系统之上安装Pygame的方法
2020/05/20 Python
Keras 在fit_generator训练方式中加入图像random_crop操作
2020/07/03 Python
快速解决pymongo操作mongodb的时区问题
2020/12/05 Python
html5构建触屏网站之touch事件介绍
2013/01/07 HTML / CSS
科颜氏印度官网:Kiehl’s印度
2021/02/20 全球购物
网站设计师的岗位职责
2013/11/21 职场文书
商务会议邀请函
2014/01/09 职场文书
产品推广策划方案
2014/05/10 职场文书
校园文明倡议书
2014/05/16 职场文书
员工2014年度工作总结
2014/12/09 职场文书
教师考核评语大全
2014/12/31 职场文书
2015年国庆节新闻稿
2015/07/18 职场文书
学生会2016感恩节活动小结
2016/04/01 职场文书
动画《朋友游戏》公开佐藤友生绘制的开播纪念绘
2022/04/06 日漫