我有一个机器人,它玩一个由selenium驱动的网络游戏。它通过使用图像识别(查找子图像)来工作。在Windows中,我的bot工作得很好;但是,我的bot在Ubuntu中不工作。
机器人的工作方式如下:
我把这个问题追溯到了我用来查找子图像的函数。它不能工作,因为屏幕截图的图像质量是不同的Ubuntu,它不能做一个像素的像素匹配。
来自Windows的工作针和干草映像集在Ubuntu上工作得很好,反之亦然--从Ubuntu创建的非工作针和干草映像集在Windows和Ubuntu上都不能工作。
我的截图在Windows中是~6KB,在Ubuntu中是~5KB。
当我在PIL中打开本地“指针”图像并保存它时,它从1.7KB变为1.5KB,因此无法工作。这是代码的非500行版本:
# imports and everything else here..
browser.save_screenshot("haystack.png") # selenium screenshot
haystack = Image.open("haystack.png")
needle = Image.open("needle.png") # the needle is a local file
haystack.save("haystack_new.png","PNG",quality=100) # DEBUGGING
needle.save("needle_new.png","PNG",quality=100) # DEBUGGING
# call "needle in a haystack" locator function here谁能告诉我出什么事了吗?为什么linux屏幕截图质量较低?我应该安装不同版本的zlib,还是只使用opencv?
发布于 2016-01-09 12:25:04
不同的浏览器(可能还有OS/Window Manager)实现不同的彩色渲染,因此显示的像素值可能具有不同强度的R、G、B值,这对人的眼睛是不可见的,但使得浏览器/平台间屏幕截图的跨平台像素比较无效。
https://stackoverflow.com/questions/34692164
复制相似问题