Python+OpenCV让电脑帮你玩微信跳一跳


Posted in Python onJanuary 04, 2018

前言

最近微信小游戏跳一跳大热,自己也是中毒颇久,无奈手残最高分只拿到200分。无意间看到教你用Python来玩微信跳一跳一文,在电脑上利用adb驱动工具操作手机,详细的介绍以及如何安装adb驱动可以去看这篇文章,这里就不再介绍了。但是原文每次跳跃需要手动点击,于是想尝试利用图像处理的方法自动化。
最重要的不是最终刷的分数,而是解决这个问题的过程。花了一个下午尝试各种方法,最终采用opencv的模板匹配+边缘检测,方法很简单但效果很好。
本文主要分享如何用Opencv对游戏截图进行检测,自动找到小人和跳跃目标点的位置,计算跳跃距离,从而让电脑帮你玩跳一跳游戏!

本文的代码见https://github.com/moneyDboat/wechat_jump_jump,欢迎fork和star~

主要使用的Python库及对应版本:

python 3.6
opencv-python 3.3.0
numpy 1.13.3

Opencv

首先介绍下opencv,是一个计算机视觉库,本文将用到opencv里的模板匹配和边缘检测功能。

模板匹配

模板匹配是在一幅图像中寻找一个特定目标的方法之一。这种方法的原理非常简单,遍历图像中的每一个可能的位置,比较各处与模板是否“相似”,当相似度足够高时,就认为找到了我们的目标。
例如提供小人的模板图片

Python+OpenCV让电脑帮你玩微信跳一跳

import cv2
import numpy as np

# imread()函数读取目标图片和模板
img_rgb = cv2.imread("0.png", 0)
template = cv2.imread('temp1.jpg', 0)

# matchTemplate 函数:在模板和输入图像之间寻找匹配,获得匹配结果图像 
# minMaxLoc 函数:在给定的矩阵中寻找最大和最小值,并给出它们的位置
res = cv2.matchTemplate(img_rgb,template,cv2.TM_CCOEFF_NORMED)
min_val,max_val,min_loc,max_loc = cv2.minMaxLoc(res)

使用OpenCV的matchTemplate函数,就能找到中小人的位置。小人的检测效果非常好,每次都能识别得很精确。

Python+OpenCV让电脑帮你玩微信跳一跳

观察到小人跳到物块中心之后,下一个物块中心就会出现白色小圆点,同样可以匹配图中白色小圆点,从而获得跳跃目标点的坐标,计算跳跃的距离。

Python+OpenCV让电脑帮你玩微信跳一跳

但是只匹配小圆点获得跳跃目标位置会出现问题,因为有些物块本身就是白色的,导致检测失败,所以我们在检测失败(模板匹配的相似度很低)的情况下采用边缘检测。

边缘检测

边缘检测顾名思义就是检测图片中的边缘,使用opencv中的cv2.Canny函数。
跳一跳的画面很简洁,所以边缘检测的效果很好。检测出边缘后,从上至下扫描图片就能找到下一个物块的大致位置。

img = cv2.imread('1.png', 0)

# 先做高斯模糊能够提高边缘检测的效果
img = cv2.GaussianBlur(img,(5,5),0) 
canny = cv2.Canny(img, 1, 10)

Python+OpenCV让电脑帮你玩微信跳一跳

总结

以上就是用OpenCV让电脑帮你玩跳一跳的整体思路,还有很多细节之后再补充,具体的流程见https://github.com/moneyDboat/wechat_jump_jump中的play.py文件,我已经尽力将代码注释写得详尽。
电脑上安装好adb驱动和相关的Python库,手机通过数据线连接电脑,运行play.py,接下来你就可以刷刷剧吃吃零食,然后让电脑帮你刷分啦~

这是我自己的结果截图,自动刷到1000分以上是没有问题的。

Python+OpenCV让电脑帮你玩微信跳一跳

还有很多不完善的地方,例如屏幕分辨率适配等,如果有什么更好的想法和建议,欢迎评论共同探讨~~

更多内容大家可以参考专题《微信跳一跳》进行学习。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
利用Python绘制数据的瀑布图的教程
Apr 07 Python
python八大排序算法速度实例对比
Dec 06 Python
Python制作豆瓣图片的爬虫
Dec 28 Python
使用Python进行QQ批量登录的实例代码
Jun 11 Python
python使用matplotlib模块绘制多条折线图、散点图
Apr 26 Python
pandas进行时间数据的转换和计算时间差并提取年月日
Jul 06 Python
对Python _取log的几种方式小结
Jul 25 Python
Django2 连接MySQL及model测试实例分析
Dec 10 Python
tensorflow实现测试时读取任意指定的check point的网络参数
Jan 21 Python
python函数定义和调用过程详解
Feb 09 Python
keras-siamese用自己的数据集实现详解
Jun 10 Python
为什么说python适合写爬虫
Jun 11 Python
Python编程求解二叉树中和为某一值的路径代码示例
Jan 04 #Python
Python编写Windows Service服务程序
Jan 04 #Python
微信跳一跳python辅助软件思路及图像识别源码解析
Jan 04 #Python
Python操作MongoDB数据库的方法示例
Jan 04 #Python
Python字典操作详细介绍及字典内建方法分享
Jan 04 #Python
Python tkinter实现的图片移动碰撞动画效果【附源码下载】
Jan 04 #Python
Python给你的头像加上圣诞帽
Jan 04 #Python
You might like
PHP树的代码,可以嵌套任意层
2006/10/09 PHP
详解PHP中的null合并运算符
2015/12/30 PHP
JavaScript 浏览器验证代码(来自discuz)
2010/07/17 Javascript
js 代码优化点滴记录
2012/02/19 Javascript
写出高效jquery代码的19条指南
2014/03/19 Javascript
浅析webapp框架AngularUI的demo
2014/12/21 Javascript
Javascript中的匿名函数与封装介绍
2015/03/15 Javascript
jQuery提示插件alertify使用指南
2015/04/21 Javascript
js如何判断访问是来自搜索引擎(蜘蛛人)还是直接访问
2015/09/14 Javascript
Bootstrap 模态框(Modal)插件代码解析
2016/12/21 Javascript
JavaScript字符串_动力节点Java学院整理
2017/06/27 Javascript
总结js中的一些兼容性易错的问题
2017/12/18 Javascript
Vue的elementUI实现自定义主题方法
2018/02/23 Javascript
vue element-ui table组件动态生成表头和数据并修改单元格格式 父子组件通信
2019/08/15 Javascript
微信小程序 搜索框组件代码实例
2019/09/06 Javascript
express中static中间件的具体使用方法
2019/10/17 Javascript
vue中v-for循环选中点击的元素并对该元素添加样式操作
2020/07/17 Javascript
vue 使用vant插件做tabs切换和无限加载功能的实现
2020/11/04 Javascript
[00:59]DOTA2荣耀之路1:Doom is back!weapon X!
2018/05/22 DOTA
pyramid配置session的方法教程
2013/11/27 Python
Python中使用装饰器时需要注意的一些问题
2015/05/11 Python
django通过ajax发起请求返回JSON格式数据的方法
2015/06/04 Python
Python简单实现安全开关文件的两种方式
2016/09/19 Python
Python使用回溯法子集树模板解决爬楼梯问题示例
2017/09/08 Python
python中requests和https使用简单示例
2018/01/18 Python
对python GUI实现完美进度条的示例详解
2018/12/13 Python
Python3 使用map()批量的转换数据类型,如str转float的实现
2019/11/29 Python
Python之Django自动实现html代码(下拉框,数据选择)
2020/03/13 Python
python 19个值得学习的编程技巧
2020/08/15 Python
简单了解Python字典copy与赋值的区别
2020/09/16 Python
html2canvas生成的图片偏移不完整的解决方法
2020/05/19 HTML / CSS
波兰在线香水店:Perfumy.pl
2019/08/12 全球购物
2014年高中班主任工作总结
2014/11/08 职场文书
2014流动人口计划生育工作总结
2014/12/20 职场文书
教你如何使用Python开发一个钉钉群应答机器人
2021/06/21 Python
FFmpeg视频处理入门教程(新手必看)
2022/01/22 杂记