重庆分公司,新征程启航

为企业提供网站建设、域名注册、服务器等服务

python微信跳一跳开发中棋子定位像素遍历的示例分析-创新互联

这篇文章主要介绍python微信跳一跳开发中棋子定位像素遍历的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

让客户满意是我们工作的目标,不断超越客户的期望值来自于我们对这个行业的热爱。我们立志把好的技术通过有效、简单的方式提供给客户,将通过不懈努力成为客户在信息化领域值得信任、有价值的长期合作伙伴,公司提供的服务项目有:域名注册、虚拟空间、营销软件、网站建设、吴忠网站维护、网站推广。

方法说明

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

  • 从高度的1/3处开始至高度的2/3处进行遍历;

  • 首先间隔50像素进行搜索

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

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

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

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

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

def find_piece_and_board(im):
 #寻找关键坐标
 w, h = im.size

 piece_x_sum = 0
 piece_x_c = 0
 piece_y_max = 0
 board_x = 0
 board_y = 0
 scan_x_border = int(w / 8) # 扫描棋子时的左右边界
 scan_start_y = 0 # 扫描的起始 y 坐标
 im_pixel = im.load()
 # 以 50px 步长,尝试探测 scan_start_y
 for i in range(int(h / 3), int(h*2 / 3), 50):
 last_pixel = im_pixel[0, i]
 for j in range(1, w):
  pixel = im_pixel[j, i]
  # 不是纯色的线,则记录 scan_start_y 的值,准备跳出循环
  if pixel != last_pixel:
  scan_start_y = i - 50
  break
 if scan_start_y:
  break
 print('scan_start_y: {}'.format(scan_start_y))

 # 从 scan_start_y 开始往下扫描,棋子应位于屏幕上半部分,这里暂定不超过 2/3
 for i in range(scan_start_y, int(h * 2 / 3)):
 # 横坐标方面也减少了一部分扫描开销
 for j in range(scan_x_border, w - scan_x_border):
  pixel = im_pixel[j, i]
  # 根据棋子的最低行的颜色判断,找最后一行那些点的平均值,这个颜
  # 色这样应该 OK,暂时不提出来
  if (50 < pixel[0] < 60) \
   and (53 < pixel[1] < 63) \
   and (95 < pixel[2] < 110):
  piece_x_sum += j
  piece_x_c += 1
  piece_y_max = max(i, piece_y_max)

 if not all((piece_x_sum, piece_x_c)):
 return 0, 0, 0, 0
 piece_x = int(piece_x_sum / piece_x_c)
 piece_y = piece_y_max - piece_base_height_1_2 # 上移棋子底盘高度的一半

遍历过程动态演示

python微信跳一跳开发中棋子定位像素遍历的示例分析

实际运行动画

以下是实际运行的定位动画。

python微信跳一跳开发中棋子定位像素遍历的示例分析

优缺点分析

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

改进

其实上述方法还可以进一步优化,以大大减小遍历的面积:

  • 以50像素为间隔从1/3高度开始遍历;

  • 当首次满足给定的棋子颜色时,记录x值的和与个数,平均后得到棋子的x值;

  • 沿x值从上向下对高度进行遍历,可以得到满足棋子颜色的大y值和最小y值;

  • 对y值进行处理,如减去一个固定高度,即可得到棋子的底部中心y值;

  • 对最高点和最低点进行平均,即可得到棋盘的中心y值。

遍历的过程如下:

python微信跳一跳开发中棋子定位像素遍历的示例分析

以上是“python微信跳一跳开发中棋子定位像素遍历的示例分析”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注创新互联行业资讯频道!


网页标题:python微信跳一跳开发中棋子定位像素遍历的示例分析-创新互联
文章网址:http://cqcxhl.cn/article/csgsdg.html

其他资讯

在线咨询
服务热线
服务热线:028-86922220
TOP