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

作者:船D长 时间:2021-12-16 10:31:17 

前言

最近微信小游戏跳一跳大热,自己也是中毒颇久,无奈手残最高分只拿到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让电脑帮你玩微信跳一跳

来源:http://blog.csdn.net/moneydboat/article/details/78941582

标签:Python,OpenCV,微信,跳一跳
0
投稿

猜你喜欢

  • JS组件Bootstrap实现图片轮播效果

    2024-04-22 13:03:11
  • PHP Web木马扫描器代码 v1.0 安全测试工具

    2024-04-29 13:58:09
  • python 输入字符串生成所有有效的IP地址(LeetCode 93号题)

    2022-09-06 00:16:57
  • 现代 javscript 编程

    2011-04-21 16:24:00
  • python3 使用traceback定位异常实例

    2023-05-03 12:42:35
  • python爬虫中多线程的使用详解

    2021-01-18 09:16:15
  • Python3.5.3下配置opencv3.2.0的操作方法

    2021-06-20 19:43:53
  • Python开发SQLite3数据库相关操作详解【连接,查询,插入,更新,删除,关闭等】

    2024-01-21 15:16:21
  • min-height 的原始实现方式

    2008-06-29 15:04:00
  • ES6的循环与可迭代对象示例详解

    2024-05-02 17:25:22
  • 关于Keras Dense层整理

    2022-03-02 17:04:15
  • js is_valid_filename验证文件名的函数

    2024-04-23 09:12:05
  • ASP生成XML文件

    2009-06-29 16:28:00
  • Python输出汉字字库及将文字转换为图片的方法

    2023-01-13 07:06:39
  • 带你从内存的角度看Python中的变量

    2021-02-13 13:27:50
  • Python实现对照片中的人脸进行颜值预测

    2023-04-05 18:21:12
  • 基于JS实现动态跟随特效的示例代码

    2023-06-30 11:15:16
  • django 通过URL访问上传的文件方法

    2022-09-02 22:03:59
  • Python实现直播弹幕自动发送功能

    2021-08-23 12:31:37
  • 小谈访客浏览器分辨率

    2007-10-18 13:12:00
  • asp之家 网络编程 m.aspxhome.com