基于图像识别的微信游戏“跳一跳”自动控制实验

本文介绍了如何使用C++和OpenCV库通过图像识别技术实现微信游戏'跳一跳'的自动控制。通过分析游戏画面,识别棋子和跳台中心,计算跳跃时间,实现游戏的自动化操作。尽管存在一些挑战,如紫色礼盒的识别,但最终实现了较精确的坐标计算。
摘要由CSDN通过智能技术生成

最近,微信小游戏“跳一跳”很火,看着朋友圈里别人晒出的图,我这个手残党十分不是滋味,于是我就想,能不能利用图像处理,做一个全自动的外挂呢。说罢,直接动手。

Ps:以下内容的部分步骤在实验过程中我是使用了多种方案进行比较的,限于篇幅,这里只给出表现较好的一种。最终的成品识别的结果并不是太精确,在下才疏学浅,还望各位大佬不吝赐教。

关于控制方面,由于这个程序是运行在PC机上的,我没有移植到手机端,为了控制微信的游戏,我使用USB线连接电脑和安卓手机,然后使用了一个可供电脑控制手机的软件,Total Control。这样,程序透过Total Control就可以实现在手机上模拟点击的目的。

关于程序语言的选择,我使用的是C++语言,利用了OpenCV库作图像处理,WindowsAPI模拟鼠标点击。

以下是算法分析。

首先是明确输入输出,输入很清楚,那就是游戏画面。至于输出,玩过“跳一跳”的人都知道,操作者只需要控制按下的时间长短,无需其他操作,所以算法的输出就是按下到松开的时间间隔。

图片1

其次是时间的计算,网上已经有很多大神分析过了,点击间隔时间T与跳跃的距离L近似为线性关系。这里直接套用这个结论。得到

T=kL

其中,T的单位是毫秒,L的单位是像素长度,经过本人手工测试,k的值大概是4.34.5

于是问题就转换为由输入图像,求解棋子底座中心到下一个跳台中心的距离。这个问题又可以进一步分解为求解棋子底座中心坐标和求解下一个跳台平面中心坐标。

于是,算法的流程如下:

图片2

其中,计算距离是很简单的数学问题,这里不作详述,重点放在棋子坐标识别与跳台中心识别上,下面分两部分对其进行说明。

1、棋子坐标识别

跳一跳简洁的画风使分离棋子异常简单,由于棋子与背景具有鲜明的对比,这里无需训练分类器。如果做过手势分割的人就知道,通过肤色可以把手从背景中分割出来,这里使用类似的原理。

从游戏可知,棋子的颜色是固定的,为紫色,具有明暗变化,针对该特点,这里我把图像从RGB空间映射到

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值