我想更快地检测python中的颜色

我想更快地检测python中的颜色,python,Python,我用python编写了一个脚本,可以检测屏幕上的颜色和点击 import pyautogui def get_pixel_colour(i_x, i_y): import PIL.ImageGrab return PIL.ImageGrab.grab().load()[i_x, i_y] while(True): print (get_pixel_colour(400, 400)) if (get_pixel_colour(400, 400)) == (75, 21

我用python编写了一个脚本,可以检测屏幕上的颜色和点击

import pyautogui
def get_pixel_colour(i_x, i_y):
   import PIL.ImageGrab
   return PIL.ImageGrab.grab().load()[i_x, i_y]



while(True):
   print (get_pixel_colour(400, 400))
   if (get_pixel_colour(400, 400)) == (75, 219, 106):
       pyautogui.click(400, 400)
我想让这个脚本更快,因为它只在50毫秒左右运行,我想让它达到50毫秒的一半。我对编码相当陌生,所以我不知道该怎么做才能让它更快

总之:

import pyautogui
import PIL.ImageGrab

def get_pixel_colour(i_x, i_y):
    return PIL.ImageGrab.grab().load()[i_x, i_y]


while(True):
   c = get_pixel_colour(400, 400)
   print(c)
   if c == (75, 219, 106):
       pyautogui.click(400, 400)

首先,将
get\u pixel\u color
的结果存储在一个变量中,以缓存该结果。这将减少一半的时间,因为它不会为您的打印和比较制作昂贵的屏幕截图

其次,从函数中删除导入。将导入始终放在文件的顶部是一种惯例。如果将import语句保留在函数中,那么它的效率也会更高一些,因为import语句必须多次求值。它不会每次都导入模块,但仍然需要花费一小部分时间

第三,你可能想更有效地处理它,只抓取你感兴趣的像素
grab
接受一个参数
bbox
,该参数定义要获取的像素的边界框

import pyautogui
import PIL.ImageGrab


def get_pixel_colour(x, y):
    return PIL.ImageGrab.grab(bbox=(x, y, x+1, y+1)).load()[0, 0]


while True:
    colour = get_pixel_colour(400, 400)
    print(colour)
    if colour == (75, 219, 106):
        pyautogui.click(400, 400)

首先,我肯定会将导入PIL.ImageGrab从循环中移出。然后,您可以将
get\u pixel\u color(400400)
存储在变量中,然后使用该变量进行打印和比较,这样您就不必调用
PIL.ImageGrab.grab().load()[I\u x,I\u y]
两次。还可以删除(或注释)所有调试打印。在屏幕上打印要花费@Wippo的执行时间,
print
语句实际上是调试打印还是@SygMstr脚本所需的功能。@CaptainTrojan我只想指出打印会影响运行时,当您想测量脚本的性能时,您应该对调试打印