大家好,欢迎来到IT知识分享网。
《大家来找茬》游戏辅助工具开发
提示:本博文仅供学习交流,并无任何破坏游戏环境之意。
规则分析
在规定时间内找出2张相似的图片中不一样的5处地方就算过关,一般是连续5回合,也就是5组图 25个错误地方。在总时间内找到最多最快的算胜利。
开发思路
- 屏幕抓取
- 图片对比,找出不同之处
- GUI显示帮助信息
程序设计
1.获取图片
首先,获取游戏界面中两张相似图片。关键部分程序如下:
win32gui.GetWindowRect(handle) # 获取窗口矩形坐标 # 通过计算目标图片相对于父窗口的位置进行截取 img_ready = ImageGrab.grab((x1, y1, x2, y2)) img_left = ImageGrab.grab((x1 + 134, y1 + 463, x1 + 134 + 582, y1 + 463 + 439)) img_right = ImageGrab.grab((x1 + 820, y1 + 463, x1 + 820 + 582, y1 + 463 + 439))
运行结果如下图所示:
2.图片对比
将获取的两张图片进行对比,找出不同之处。两张图片的不同之处总结起来有两点:颜色差异和轮廓差异。颜色差异可通过简单的三通道求差获取,轮廓差异可通过轮廓检测后求差获取(预期方案)。但是在实际对比两张图片时发现其实两张图片完全不一样,一方面两者有一定的色差,另一方面两者轮廓并非绝对重合,而是存在一定偏差。所以我觉得采用将两张图片叠加,然后生成GIF动图的形式辅助我们用肉眼快速找出不同。这种生成GIF图的方法能够找出两者的轮廓差异,但是在颜色差异上略显乏力(特别是深红色和紫色,两者闪烁我根本看不出来有变化。),所以此时需要用到色差图进行”补漏“。相关关键代码如下:
diff = cv.subtract(cv.cvtColor(np.asarray(img_left), cv.COLOR_BGR2RGB), cv.cvtColor(np.asarray(img_right), cv.COLOR_BGR2RGB)) def create_gif(image_list, gif_name, duration = 0.35): frames = [] for image_name in image_list: frames.append(imageio.imread(image_name)) imageio.mimsave(gif_name, frames, 'GIF', duration = duration) return def main(): image_list = ['img1.jpg', 'img2.jpg'] gif_name = 'diff.gif' duration = 0.1 create_gif(image_list, gif_name, duration)
运行结果如下图所示:
3.GUI显示
本来是想通过获取图片不同之处的坐标值,利用win32api的mouse_event进行单击操作,实现完全的自动化操作。但是由于时间和精力限制,使用GUI显示辅助判断信息的方式取缔了上述方案。关键代码如下:
def run(self, evt): windowName = "大家来找茬" dst = get_picture(windowName) # cv.imshow("dst", dst) gif.create_gif(["img1.jpg", "img2.jpg"], "diff.gif", 0.1) self.animation.Stop() self.animation = AnimationCtrl(self.panel, -1, Animation('diff.gif'), pos = (0, 0)) # 创建一个动画 self.animation.Play() # 播放动图 row, col, x = dst.shape bmp = wx.Bitmap.FromBuffer(col, row, dst) wx.StaticBitmap(self, -1, bmp, (0, 500), (bmp.GetWidth(), bmp.GetHeight())) # BUG:静态图更新延迟
未解决BUG:静态图更新有延迟,一般gif更新后需再点击一次按钮才会更新jpg
总结
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/135285.html