用python玩微信跳一跳系列-棋子定位之像素遍历

前言

在前几篇博客中,分别就棋子的颜色识别、模板匹配等定位方式进行了介绍和实践,这一篇博客就来验证一下github中最热门的跳一跳外挂中采用的像素遍历的方法。

方法

像素遍历的实质依然是颜色识别。在github中给出的方法中,采用像素遍历的方法是:

间隔50像素 从高度的1/3处开始至高度的2/3处进行遍历;

当像素的颜色和每一行开始的像素颜色不同时,认为找到了最上面的棋盘位置,则返回上一个间隔处开始遍历(i-50);

对每一行的像素都进行遍历,当满足给定的颜色范围时,记录最下面一行的y值,x值的和与个数,平均即可得到中心x值;

所得到的x值和y值即为棋子最底部的中心位置;

按照自己手机的分辨率调整棋子的高度(减去一个固定值).

上诉方法的代码如下(可以自行到github下载):

遍历过程动态演示:

实际运行动画:

优缺点分析

像素遍历的好处是无需额外的python库,但其速度显然明显低于我在前面用过的其它方法,这不奇怪,外接库用到的颜色识别方法其实是经过优化和集成的,像素遍历是其底层的技术方案,速度慢理所当然。

改进

其实上述方法还可以进一步优化,以大大减小遍历的面积: 1. 以50像素为间隔从1/3高度开始遍历; 2. 当首次满足给定的棋子颜色时,记录x值的和与个数,平均后得到棋子的x值; 3. 沿x值从上向下对高度进行遍历,可以得到满足棋子颜色的最大y值和最小y值; 4. 对y值进行处理,如减去一个固定高度,即可得到棋子的底部中心y值; 5. 对最高点和最低点进行平均,即可得到棋盘的中心y值。

遍历的过程如下:

后记

可以看到,优化后的遍历个数大大减小,速度得到极大提高。

  • 发表于:
  • 原文链接:http://kuaibao.qq.com/s/20180130A1IR9T00?refer=cp_1026

扫码关注云+社区