Python linux 中的枕头图像质量不同
Python Pillow image quality different in linux
我有一个玩由 selenium 驱动的在线游戏的机器人。它通过利用图像识别(寻找子图像)来工作。在 Windows,我的机器人工作正常;但是,我的机器人在 Ubuntu.
中不工作
机器人是这样工作的:
- 截取 selenium 中的元素
- 使用枕头加载屏幕截图
- 在较大的屏幕截图中找到子图像(本地图像)
我已将问题追溯到我用来查找子图像的函数。它不起作用,因为 Ubuntu 上的屏幕截图图像质量不同,并且无法逐像素匹配。
来自 Windows 的工作针和干草堆图像集在 Ubuntu 上工作正常,反之亦然 -- 从 [=41= 创建的非工作针和干草堆图像集] 不适用于 Windows 和 Ubuntu。
我的屏幕截图在 Windows 中始终为 ~6KB,在 Ubuntu 中始终为 ~5KB。
当我在 PIL 中打开本地 "needle" 图像并保存它时,它从 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?
不同的浏览器(可能 OS/Window 管理器)实现颜色渲染的方式不同 - 因此显示的像素值可能具有不同强度的 R、G、B 值,这些值对于人眼来说是不可见的,但是 OS/Window =14=] 屏幕截图的像素级比较 browsers/platforms 无效。
我有一个玩由 selenium 驱动的在线游戏的机器人。它通过利用图像识别(寻找子图像)来工作。在 Windows,我的机器人工作正常;但是,我的机器人在 Ubuntu.
中不工作机器人是这样工作的:
- 截取 selenium 中的元素
- 使用枕头加载屏幕截图
- 在较大的屏幕截图中找到子图像(本地图像)
我已将问题追溯到我用来查找子图像的函数。它不起作用,因为 Ubuntu 上的屏幕截图图像质量不同,并且无法逐像素匹配。
来自 Windows 的工作针和干草堆图像集在 Ubuntu 上工作正常,反之亦然 -- 从 [=41= 创建的非工作针和干草堆图像集] 不适用于 Windows 和 Ubuntu。
我的屏幕截图在 Windows 中始终为 ~6KB,在 Ubuntu 中始终为 ~5KB。
当我在 PIL 中打开本地 "needle" 图像并保存它时,它从 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?
不同的浏览器(可能 OS/Window 管理器)实现颜色渲染的方式不同 - 因此显示的像素值可能具有不同强度的 R、G、B 值,这些值对于人眼来说是不可见的,但是 OS/Window =14=] 屏幕截图的像素级比较 browsers/platforms 无效。