PyAutoGui 在 MacOS python3.8 上仍然没有显示正确的 RGB 像素值

问题描述

我想在我的 macbook 屏幕上获取当前鼠标位置的 RGB 值。 现在它显示不正确:当我将鼠标悬停在黑色图像上时,RGB 值不会接近 (0,0) 它保持像 (181,201,233)。当我将鼠标光标放在正在播放的 YT 视频上时,RGB 值不会改变。只有当我移动鼠标时,RGB 值才会发生变化,但不会相应地发生变化。我在空闲/新文件中尝试了这些功能

1.
pyautogui.displayMousePosition()   #output:  X:  183 Y:  291 RGB: (174,188,211)

2.
posXY = pyautogui.position() 
print(pyautogui.pixel(posXY[0],posXY[1]))   #output:  RGB(red=200,green=212,blue=224)

3.
im = pyautogui.screenshot()
pxRGB = im.getpixel((PosXY[0],PosXY[1]))   #output:  (181,203,229,255)

4.
pxRGB = ImageGrab.grab().getpixel((PosXY[0],PosXY[1])) #output:  (167,192,225,255)


所有这些输出都是错误的,但有效的是从互联网下载黑白图像打开它并从中获取像素值:

im = Image.open("black-white.jpg").convert('RGB')
px = im.getpixel((PosXY[0],PosXY[1])) 
print(px)                                     #output (0,0) and (255,255,255) working!

现在我尝试使用笔记本电脑的屏幕截图(代码中和代码外)并使用该 img 来做同样的事情,但仍然没有给我正确的 RGB 值。 (即使鼠标位置不正确,我也找不到比 (50,46,76) 更暗的点,而 SC 上有很多这样的点)

任何帮助将不胜感激!

额外信息:Macbook pro Catalina 10.15.7 我首先在 Python 3.8 和 3.9 上尝试,鼠标位置显示正确,左上 (0,0) 和右下 (1679,1049)。 pyautogui.displayMousePosition() 在我的 Windows 7/10 笔记本电脑上给出正确的 RGB 值。我看到使用 pyautogui.screenshot() 制作的屏幕截图只显示我的 backbroundimg 而不是像互联网或某些文件那样打开窗口。但是“不在代码中” Sc 看起来很正常,尽管认情况下没有分配给它们的 .png 只是空的:examplescreenshot12-23-3 此外,我可以在网上找到的所有代码都不适合我。为了能够从函数中看到任何 RGB 值,我必须先导入 sys,然后将 sys.platform = darwin 设置为 sys.platform = '_' 我不是在虚拟环境中工作,也没有使用过 python。我真的不在乎需要多长时间才能获得像素 RGB 值。在我的 macbook 上更改 backgroundImg 确实会导致不同的输出,但仍然不正确。

解决方法

你可以很容易地做到这一点 你应该安装pyscreeze模块

import pyscreeze

#the value of pixel whose value is to be get
x=23
y=23

#screen object
screen=pyscreeze.screenshot()

rgb_values=screen.getpixel((x,y))