ios手游游戏辅助挂机工具_OpenCV在游戏自动化辅助工具中的应用

  • OpenCV是什么?

一句话概括:OpenCV是目前最流行的开源计算机视觉库之一,提供了多种方便快捷的图像操作API。更多介绍,请参考官网和维基百科的介绍:

https://opencv.org/

https://zh.wikipedia.org/wiki/OpenCV

OpenCV的代码是开源的,使用cmake进行编译,源码可以在github上搜到。OpenCV丰富而通俗易懂的API可以让使用者无需关注那些冗杂的硬件平台、图像解析之类的东西,有时甚至不需要使用者具备很高的算法和数学水平,直接编写自己的应用层逻辑即可。


  • OpenCV的模板匹配功能

OpenCV的功能非常丰富,我有一本OpenCV的书,16开A4纸大小,厚度大概有五厘米左右。一篇文章不可能把OpenCV讲清楚,本文的主题仅仅是OpenCV的一个功能模板匹配,以及该API在游戏辅助工具中的应用。

模板匹配是一个什么功能呢?就是输入一个图像模板,然后在另外一张图像中找到该图像中与模板匹配的部分,直接看下面几张图,简单明了:

原图:

ios手游游戏辅助挂机工具_OpenCV在游戏自动化辅助工具中的应用_第1张图片

模板图:

75f601ccc0929d37fdd424241847ddad.png

在原图中用红框圈出所有与模板图匹配的部分,并打开一个窗口显示:

ios手游游戏辅助挂机工具_OpenCV在游戏自动化辅助工具中的应用_第2张图片

OpenCV的下载、编译、环境搭建,网上多得很,就不在这里赘述了,如果不会C++,也可以使用python或其他语言,OpenCV提供完善的python支持,官网就有python引导。

假设环境都已经搭建好了,下面开始写代码,上面的几步操作的全部代码如下图所示:

ios手游游戏辅助挂机工具_OpenCV在游戏自动化辅助工具中的应用_第3张图片

前几行的作用很简单,从硬盘上读取原图mario.png和要查找的模板图coin.png。cv::Mat是OpenCV封装的数据格式,所有的图片加载到OpenCV都是这个数据格式。这里有一个坑是,模板图的尺寸一定要和要搜索的图中的对象尺寸对上,比如说在原图中的金币大小是10*14,那模板图的尺寸也需要是10*14,不一样的话需要做一下相应的处理。

接下来的两行就是功能的核心API:cv::matchTemplate。

函数接收四个参数:原图、要匹配的模板图,匹配结果,匹配算法。匹配算法是固定的几个枚举值,在上面的demo中采取的是TM_CCOEFF_NORMED,OpenCV提供的全部匹配算法包括以下几种:

ios手游游戏辅助挂机工具_OpenCV在游戏自动化辅助工具中的应用_第4张图片

数学好的同学可以进一步参考一下官网的说明,数学不好的话……挨个试一试,看看哪个更符合需求。在进行匹配之后,假如我们将found输出到屏幕上,会得到如下这样的一张匹配结果:

ios手游游戏辅助挂机工具_OpenCV在游戏自动化辅助工具中的应用_第5张图片

OpenCV会将图像上的像素点与模板匹配的程度大小写入到一张灰度图中,在demo采用的TM_CCOEFF_NORMED算法中,灰度图的色值越大(反馈在图像上就是越白),匹配度越高。从上面的输出结果来看,最亮的那几个地方就是金币所在的位置。

ios手游游戏辅助挂机工具_OpenCV在游戏自动化辅助工具中的应用_第6张图片

接下来设置阈值为0.8,循环搜索,匹配所有程度大于阈值的点,都丢到一个vector(C++的一种容器,类似Java的ArrayList和Python、JS的数组)里面去。循环最后的cv::floodFill,作用是每找到一个点后,就把这个点的色值全部置为0,清除这个点。这里有一个小的注意事项是注释掉的几行代码,选择不同的算法是,选取点的规则和阈值判断是不一样的,对demo选择的TM_CCOEFF_NORMED算法来说,是找最大值,而对TM_SQDIFF和TM_SQDIFF_NORMED来说,是找最小值。

后面的代码就没什么好说的了,demo中做的操作是在原图上将每个匹配到的点都用一个红框圈起来,然后打开一个窗口进行展示,cv::rectangle是OpenCV中画方框的方法,namedWindow、imshow是打开窗口相关的API。在实际的应用中,既然已经找到了目标,接下来就可以结合按键精灵之类的工具来进行进一步的自动化操作。子曾经曰过:君子生非异也,善假于物也,合理使用一些自动化工具,既可以提升测试人员的工作效率、提高测试点覆盖率,也可以用来做一些其他的节省人力的事情。

你可能感兴趣的:(ios手游游戏辅助挂机工具)