使用PIL或cv2等模块在python中捕获屏幕的最有效方法是什么?因为它占用了很多内存。
我想教AI通过屏幕抓取和整洁来玩Chrome的恐龙游戏,但这是减慢速度的方法...
我努力了:

import numpy as np
from PIL import ImageGrab
import cv2
import time

last_time = time.time()
while True:
    printscreen_pil = ImageGrab.grab(bbox= (0, 40, 800, 640))

    printscreen_numpy = np.array(printscreen_pil.getdata(), dtype = 'uint8').reshape((printscreen_pil.size[1], printscreen_pil.size[0], 3))

    print(f'the loop took {time.time() - last_time} seconds')
    last_time = time.time()

     cv2.imshow('window', printscreen_numpy)
     if cv2.waitKey(25) & 0xFF == ord('q'):
         cv2.destroyAllWindows()
         break

>
    # average time = the loop took 2.068769931793213 seconds

最佳答案

您可以使用 mss ,它是“纯python中的超快速跨平台多个屏幕截图模块”。
例如:

import time
import cv2
import numpy as np
from mss import mss

start_time = time.time()
mon = {'top': 200, 'left': 200, 'width': 200, 'height': 200}
with mss() as sct:
    while True:
        last_time = time.time()
        img = sct.grab(mon)
        print('The loop took: {0}'.format(time.time()-last_time))
        cv2.imshow('test', np.array(img))
        if cv2.waitKey(25) & 0xFF == ord('q'):
            cv2.destroyAllWindows()
            break
结果:
The loop took: 0.024120092391967773
输出:
python - 使用PIL或cv2等模块在python中捕获屏幕的最有效方法是什么?因为它占用了很多内存-LMLPHP
结果比当前结果快100倍。

10-07 19:25
查看更多