游戏测试 自动化来玩大家来找茬

ctro15547 · 2018年01月05日 · 最后由 afantishui 回复于 2018年01月27日 · 最后更新自管理员 Lihuazhang · 2248 次阅读
本帖已被设为精华帖!

有人提了个意,做得不好请多指教

下面是大致过程

准备材料:
python
opencv
PIL

思路:
反色 灰度等放大一张图片的特征-》与另一张图片合并 让特征显现-》截取通用底色块-》合并的图片与底色块对比找不同

代码块基本都能百度到,贴主要的就不全贴了,

图片分两张 t1.png t2.png

反色:
将随意一张作为放大特征图

iTmp = cv.CreateImage(size,image.depth,image.nChannels)
for i in range(image.height):
for j in range(image.width):
iTmp[i,j] = (255-image[i,j][0],255-image[i,j][1],255-image[i,j][2])

其实反色也可以用cv2做的

合并:
注意两张图片尺寸大小要一样
img_add = cv2.addWeighted(img1, alpha1=0.1, img2, alpha2=0.1, gamma=0)

合并以后,显示出比较明显的特征点,我用箭头标出来了

截取通用底色:
发现这样合并后,非特征点处的底色都是一致的(不知道正不正确)
所以可以截取一小块作为对比色块,我的大小是50*50

找不同:
img1 = 通用底色块
img2 = 每次循环把合并后的图片切成50*50的小方块
result = cv2.matchTemplate(img1,img2,method='cv2.TM_CCOEFF_NORMED')

这样对比的话,当img2切块的图片与底色块不符的话 就说明是不同的地方 就可以标记出来了

效果图:

自动点击:
既然已经标记出来,点击坐标的事情就可以交给adb来做了
adb shell input tap 250 250

pc端也可以通过python开源库来完成
https://github.com/pepijndevos/PyMouse/wiki/Documentation

from pymouse import PyMouse
m = PyMouse()
m.move(200, 200)
m.click(500, 300, 1)

最后:

方法很简单 当是练手学习和记录。
找出来的特征点可能不会出现在正中间 所以点击有可能失败
可以细化这个搜索匹配的方法
不过暂时可以半自动化 看着图片人工点击 hahahaha

共收到 6 条回复 时间 点赞

这个有意思

Lihuazhang 将本帖设为了精华贴 01月05日 17:08

刚走了跳一跳,又来了大家来找茬, 哈哈~

slideplustest 回复

😂 跳一跳也写了一贴,这个是有人提了一句,就记录一下想法,中间还有很多没有完善 ,不过辅助玩个游戏倒是没问题了(手动眼斜)

不错不错,👍

贴主也可以试试用Gemini,也可以做的这样的效果。

有趣有趣

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册