为了账号安全,请及时绑定邮箱和手机立即绑定

使用 PIL 或 cv2 等模块在 python 中捕获屏幕的最有效方法是什么?

使用 PIL 或 cv2 等模块在 python 中捕获屏幕的最有效方法是什么?

动漫人物 2023-07-11 14:36:34
使用 PIL 或 cv2 等模块在 python 中捕获屏幕的最有效方法是什么?因为它占用大量内存。我想教 AI 通过屏幕抓取和整洁的方式来玩 Chrome 的恐龙游戏,但它的速度很慢......我努力了:import numpy as npfrom PIL import ImageGrabimport cv2import timelast_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 
查看完整描述

1 回答

?
叮当猫咪

TA贡献1776条经验 获得超12个赞

您可以使用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

输出:

//img4.sycdn.imooc.com/64acf8a4000104fb04020405.jpg

结果比当前结果快 100 倍。



查看完整回答
反对 回复 2023-07-11
  • 1 回答
  • 0 关注
  • 111 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信