python高性能截图

import time

import cv2
import win32api
import win32con
import win32gui
import win32ui
import numpy as np

def grab_screen_win32():
    """
    region:tuple,(left, top, right,down)
    """
    hwin = win32gui.GetDesktopWindow()
    width = 1920
    height = 1080
    left = 0
    top = 0

    hwindc = win32gui.GetWindowDC(hwin)
    srcdc = win32ui.CreateDCFromHandle(hwindc)
    memdc = srcdc.CreateCompatibleDC()
    bmp = win32ui.CreateBitmap()
    bmp.CreateCompatibleBitmap(srcdc, width, height)
    memdc.SelectObject(bmp)
    while True:
        start = int(round(time.time() * 1000))
        memdc.BitBlt((0, 0), (width, height), srcdc, (left, top), win32con.SRCCOPY)
        signedIntsArray = bmp.GetBitmapBits(True)
        img = np.frombuffer(signedIntsArray, dtype='uint8')
        # print(img.shape)
        img.shape = (height, width, 4)
        # print(img.shape)
        cv2.imshow("image", img)
        cv2.waitKey(1)
        print("耗时:", int(round(time.time() * 1000)) - start, "ms")
    srcdc.DeleteDC()
    memdc.DeleteDC()
    win32gui.ReleaseDC(hwin, hwindc)
    win32gui.DeleteObject(bmp.GetHandle())

def grab_screen_dxcam():
    import dxcam
    camera = dxcam.create(device_idx=0,output_color="BGRA")  # returns a DXCamera instance on primary monitor
    camera.start(region=(0, 0, 1920, 1080),target_fps=240,video_mode=True)  # Optional argument to capture a region
    camera.is_capturing  # True
    # ... Do Something
    while True:
        start = int(round(time.time() * 1000))
        img = camera.get_latest_frame()
        cv2.imshow("image", img)
        cv2.waitKey(1)
        print("耗时:", int(round(time.time() * 1000)) - start, "ms")
    camera.stop()
    camera.is_capturing  # False
    pass
grab_screen_dxcam()
# grab_screen_win32()

两个高性能截图库

1、使用win32截图

优点:稳定,速度也快
缺点:吃内存

2、使用dxcam库截图

优点:速度比win32还快
缺点:我的电脑识别不到n卡,理论用n卡速度还可以更快,github仓库说明可以轻松达到240fps

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

__WHOAMI

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值