Jupyter Notebook:用Python玩大家来找茬fivecakes.com
最近学习计算机视觉的时候遇到找两张图片不同的问题,找到解决方案后,在QQ游戏大家来找茬中实验了一下效果.
要找不同首先得把两张图片提取出来嘛,我们先把电脑屏幕截图,然后再提取我们需要的图片.
我对比过pyscreenshot,PIL和win32gui三种截屏库的截屏速度,发现PIL比其他的截屏方式快那么一点.
屏幕截图有了,现在我们来提取其中我们需要的两幅图,首先我想到的是用边缘检测提取边界,不过效果不是很理想
所以我想先用颜色来区分一下,先来把目标图片和背景图片的颜色分布画出来,方便我们观察
从上图中我们发现背景的色调和饱和度比较集中,所以我们可以通过这两个颜色通道来过滤掉背景
统计一下x轴方向和y轴方向符合条件的像素点的个数,并且把数量统计画成折线图.
通过折线图发现在图片的边缘处折线图会出现明显的断崖,我们可以根据这点来提取出图片
接下来通过阀值简化图形
下面循环一下找出断崖处的坐标
[98, 120, 486, 515]
[409, 431, 917, 1002, 1488, 1500, 1504, 1504]
至此,我们已经找出了颜色变化明显处的x坐标和y左边,接下来我们通过排列组合的方式,找出这些坐标所绘制出的直线可能组合成的矩形.
不过,还是有很多矩形不是我们想要的,所以还需要用矩形的长宽作为阀值来进一步筛选
OK,需要的图片提取出来之后,我们可以开始找两张图片的不同啦.
我们将两幅图的色值相减并取绝对值,这时打印一下结果会明显的发现不同的地方
接下来,用圆圈画出不同之处
python中win32api库可以调用windows的API模拟鼠标点击操作,我们可以将所有不同之处模拟鼠标进行点击.
至此,完成使用Python完找不同游戏.