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

下面是大致过程

准备材料:
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


↙↙↙阅读原文可查看相关链接,并与作者交流