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 相关文章推荐
python3.3教程之模拟百度登陆代码分享
Jan 16 Python
Python学习笔记(一)(基础入门之环境搭建)
Jun 05 Python
Hadoop中的Python框架的使用指南
Apr 22 Python
Python方法的延迟加载的示例代码
Dec 18 Python
Python多线程应用于自动化测试操作示例
Dec 06 Python
详解python做UI界面的方法
Feb 27 Python
python实现将两个文件夹合并至另一个文件夹(制作数据集)
Apr 03 Python
pyinstaller打包成无控制台程序时运行出错(与popen冲突的解决方法)
Apr 15 Python
Python基于time模块表示时间常用方法
Jun 18 Python
Python matplotlib模块及柱状图用法解析
Aug 10 Python
python 使用Tensorflow训练BP神经网络实现鸢尾花分类
May 12 Python
Python3.10的一些新特性原理分析
Sep 15 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
15种PHP Encoder的比较
2007/04/17 PHP
PHP,ASP.JAVA,JAVA代码格式化工具整理
2010/06/15 PHP
php二维数组排序与默认自然排序的方法介绍
2013/04/27 PHP
PHP实现适用于文件内容操作的分页类
2016/06/15 PHP
详解PHP中websocket的使用方法
2016/09/15 PHP
浅析showModalDialog数据缓存问题(用禁止浏览器缓存解决)
2013/07/09 Javascript
javascript的BOM汇总
2015/07/16 Javascript
Javascript实现鼠标框选操作  不是点击选取
2016/04/14 Javascript
javascript时间戳和日期字符串相互转换代码(超简单)
2016/06/22 Javascript
javascript数据结构中栈的应用之符号平衡问题
2017/04/11 Javascript
jQuery中的$是什么意思及 $. 和 $().的区别
2018/04/20 jQuery
微信小程序使用component自定义toast弹窗效果
2018/11/27 Javascript
vue实现密码显示与隐藏按钮的自定义组件功能
2019/04/23 Javascript
echarts浮动显示单位的实现方法示例
2020/12/04 Javascript
Ruby使用eventmachine为HTTP服务器添加文件下载功能
2016/04/20 Python
使用Python脚本实现批量网站存活检测遇到问题及解决方法
2016/10/11 Python
python使用matplotlib绘图时图例显示问题的解决
2017/04/27 Python
Python使用django搭建web开发环境
2017/06/09 Python
Python实现嵌套列表及字典并按某一元素去重复功能示例
2017/11/30 Python
Python实现迭代时使用索引的方法示例
2018/06/05 Python
python 用lambda函数替换for循环的方法
2018/06/09 Python
tensorflow实现简单逻辑回归
2018/09/07 Python
python读取TXT每行,并存到LIST中的方法
2018/10/26 Python
Python数据可视化库seaborn的使用总结
2019/01/15 Python
python 默认参数相关知识详解
2019/09/18 Python
python实现简单的井字棋游戏(gui界面)
2021/01/22 Python
纯css3制作网站后台管理面板
2014/12/30 HTML / CSS
英国最大的婴儿监视器网上商店:Baby Monitors Direct
2018/04/24 全球购物
C#面试问题
2016/07/29 面试题
Delphi软件工程师试题
2013/01/29 面试题
社区服务活动总结
2014/05/07 职场文书
文明寝室标语
2014/06/13 职场文书
四风问题对照检查整改措施思想报告
2014/10/05 职场文书
政风行风自查自纠报告
2014/10/21 职场文书
大学生违纪检讨书300字
2014/10/25 职场文书
vue项目配置sass及引入外部scss文件
2022/04/14 Vue.js