我想更快地检测python中的颜色
我用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
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我只想指出打印会影响运行时,当您想测量脚本的性能时,您应该对调试打印