跳一跳找中心算法

本文介绍了如何通过图像处理算法在跳一跳游戏中找到角色和目标板块的中心。首先,通过识别小人的颜色区间找到底部中心,然后利用小人底部的直线特征计算出中心横坐标。接着,通过扫描找到小人底部中心的y坐标。对于目标板块,通过菱形或圆形的特性定位其顶点,从而确定中心。文章提供了详细的算法解析及代码实现。
摘要由CSDN通过智能技术生成

本人第一次写博客,欢迎各位大神前来批评指正。

话不多说,首先,分析一下从手机端获取到的图片

 

这张图是初始状态,各个色调比较分明。小人的颜色最容易辨认,且几乎不和其他任何板块或背景色冲突。其中小人的位置在屏幕的40%以下64%以上(图上是在左边,但是也有可能在右边,所以不能排除横坐标的一些点),它的颜色区间为RGB(40,40,70)-RGB(65,65,105)颜区间还是比较大的,为了包含所有的小人像素颜色,该区间被稍微放大过。

接下来的重点是找出小人的底部中心,我们放大小人的底部,如图:

 

因为小人底部是圆形,所以在放大后底部的像素呈直线排列。红色点是我们需要的位置,这个位置可以这样获得

 

通过底部的直线的左端点和右端点的横坐标算出中心中心来找出小人的x坐标位置。我们可以从64%屏幕往上(减小扫描区域,加快运算),从左往右遍历所有的像素点,那么第一个颜色在小人的颜色区间的像素点,必定是下面红色线的左端点,记录下该点(x1,y1)。为了找出右端点,继续向右扫描,当第一次扫描到的点为非小人颜色区间的点时,就说明小人最下面的像素点已经扫完了,那么右端点就是当前扫描的点(x,y1)的前一个像素点(x-1y1)同时记录下该点。通过左端点和右端点就能很快计算出小人的底部的横坐标(x1+x-1)/2;那么小人的中心横坐标如何获得?

python版本中找出的中点越在小人底部向上20个像素的位置,但是如果手机分辨率变化,可能就会引起较大的误差。从上面的图片可以看出,小人底座最宽的区域(红色长线的部分)就是小人底座的直径,小人底座中心的y坐标就是它的直径的左端点。

很显然,在底座半圆像素的图片上,直径左端点的x坐标是最小的。为了减少扫描的点的个数,我们已经找到了底部直线的左端点,只要顺着它向上想左找符合小人颜色的点,直到找到最左侧的点(x最小的点)就结束,那么,该点的y坐标yn

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值