我想检查屏幕上的像素何时发生变化,然后在像素改变颜色时放置键盘事件。但是在大约2-4分钟之后,当pyautogui.pixel()被多次调用时,计算机会慢下来。
这是我的密码
import pyautogui
OldC1 = None
while True:
NewC1 = pyautogui.pixel(750, 550)
if NewC1 != OldC1:
pyautogui.press('up')
OldC1 = NewC1;有什么办法可以避免这种滞后吗?
发布于 2019-05-19 01:22:14
我遇到过类似的问题,我解决这个问题的方法是直接使用PIL的函数,而不是pyautogui的包装函数:
from PIL import ImageGrab
pixelRGB = ImageGrab.grab().getpixel((x, y))使用这个功能并没有减慢我的电脑速度。
发布于 2019-05-19 01:59:39
问题不在于用于获取值的函数,而在于一直在运行的无限循环。
如果不需要时间精度,那么我建议通过类似于sleep()的函数在循环周期中设置瓶颈。
TRY:
from PIL import ImageGrab
import time
OldC1 = (0, 0, 0)
while True:
time.sleep(.3)
NewC1 = ImageGrab.grab().getpixel((750, 550))
if NewC1 != OldC1:
pyautogui.press('up')
OldC1 = NewC1time.sleep(2)将减少迭代的频率,从长远来看,它将带来更好的性能。
编辑:
我不使用pyautogui的像素函数来获取特定像素的RGB值,而是使用了来自PIL (Python )模块的getpixel(),原因是pyautogui.pixel()函数只是ImageGrab.grab().getpixel()的包装器,而且由于我们正在努力提高性能,所以应该直接使用getpixel()来提高性能。
PS:
pyautogui.pixel()有一个总像素查找的限制,大约在10,000左右。Read This Answer。这可能导致不正确的结果,如果查找值超过10,000,PIL的getpixel()没有这个阈值。
https://stackoverflow.com/questions/55920549
复制相似问题