Win平台Python截图各种方法对比

本文对比了Python在Windows平台上四种截图方法:PIL、Windows API、PyQt和pyautogui,从性能和代码量角度进行了分析。Win32API在性能上最佳,PyQt次之,pyautogui和PIL相对较弱。对于非Windows系统,需要考虑其他方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

0x00 前言

一年前,我在油管上曾经看到过一位大神使用Py进行GTA5 的自动驾驶,但他做出来的性能很差,常需要人为干预,于是在学习了一个暑假的深度学习后,我决定做一个自己的基于深度学习的GTA5自动驾驶.
第一步,就是获取数据,即截图与按键,本文讲大致叙述如何在win平台下截图,并对它们的性能进行对比.

0x01 使用PIL库

PIL简介

PIL只支持到了Python 2.x, 但是我们依然可以在Python 3安装pillow,和PIL一样的:

pip install pillow

PIL可以对图像进行缩放旋转剪裁模糊锐化balabala…等一大堆操作,当然,这里只介绍使用PIL截图!

使用PIL截图

主要代码如下:

import time #用于统计帧率
import numpy as np
from PIL import ImageGrab # 一会将要使用ImageGrab模块中的grab方法进行截图
import cv2 #显示图片


def get_screen(region):
"""
	region: tuple,参数为(up, left ,width, height),
	up和left是窗口距离屏幕左上角的偏移,width和height是窗口的宽和高
"""
    while True:
        temp_time = time.time()
        img = ImageGrab.grab(bbox=region)
        # 由于grab方法得到的图片是尺寸是(w*h,1),所以我们还要reshape成(w,h,channel)的形式
        img = np.array(img.getdata(), np.uint8).reshape(img.size[1], img.size[0],3)
        cv2.imshow('window', img)
        cv2.waitKey(1)
        print(1/(time.time()-temp_time),"frames per sec")

运行以下看看效果:
ImageGrab.grab函数截图
淦,1~2的FPS,做个P的python auto-drive,就算在我关闭了图片显示后性能依然捉鸡,而后发现在我注释掉转化为np.array之后的帧率却大大上升了,达到了20FPS左右.虽然这些图像之后扔进网络里炼的时候还要做preprocess,但是谁想平白无故地多写代码呢,对不对?
而且

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值