返回顶部
首页 > 资讯 > 后端开发 > Python >python简单实现对桌面进行实时捕捉画面
  • 328
分享到

python简单实现对桌面进行实时捕捉画面

python 2023-08-31 12:08:50 328人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

介绍 最近在研究目标检测方面的小东西,需要到对桌面进行实时捕捉画面,获取画面后再检测,达到实时桌面目标检测的目的,所以写了一段小代码来实现该功能,实测速度很快,符合我的需求。特此记录一下。 代码 im

介绍

最近在研究目标检测方面的小东西,需要到对桌面进行实时捕捉画面,获取画面后再检测,达到实时桌面目标检测的目的,所以写了一段小代码来实现该功能,实测速度很快,符合我的需求。特此记录一下。

代码

import argparseimport timeimport cv2import keyboardimport mssimport numpy as npimport win32com.clientimport win32conimport win32guiclass ScreenCapture:    """    parameters    ----------        screen_frame : Tuple[int, int]            屏幕宽高,分别为x,y        region : Tuple[float, float]            实际截图范围,分别为x,y,(1.0, 1.0)表示全屏检测,越低检测范围越小(始终保持屏幕中心为中心)        window_name : str            显示窗口名        exit_key : int            结束窗口的退出键值,为键盘各键对应的ASCII码值,默认是ESC键    """    def __init__(self, screen_frame=(1920, 1080), region=(0.5, 0.5), window_name='test', exit_key=0x1B):        self.parser = argparse.ArgumentParser()        self.parser.add_argument('--region', type=tuple, default=region,     help='截图范围;分别为x,y,(1.0, 1.0)表示全屏检测,越低检测范围越小(始终保持屏幕中心为中心)')        self.parser_args = self.parser.parse_args()        self.cap = mss.mss(mon=-1, optimize=True)  # 实例化mss,并使用高效模式        self.screen_width = screen_frame[0]  # 屏幕的宽        self.screen_height = screen_frame[1]  # 屏幕的高        self.mouse_x, self.mouse_y = self.screen_width // 2, self.screen_height // 2  # 屏幕中心点坐标        # 截图区域        self.GAME_WIDTH, self.GAME_HEIGHT = int(self.screen_width * self.parser_args.region[0]), int(            self.screen_height * self.parser_args.region[1])  # 宽高        self.GAME_LEFT, self.GAME_TOP = int(0 + self.screen_width // 2 * (1. - self.parser_args.region[0])), int(            0 + 1080 // 2 * (1. - self.parser_args.region[1]))  # 原点        self.RESZIE_WIN_WIDTH, self.RESIZE_WIN_HEIGHT = self.screen_width // 4, self.screen_height // 4  # 显示窗口大小        self.mointor = {            'left': self.GAME_LEFT,            'top': self.GAME_TOP,            'width': self.GAME_WIDTH,            'height': self.GAME_HEIGHT        }        self.window_name = window_name        self.Exit_key = exit_key        self.img = None    def grab_screen_mss(self, monitor):        # cap.grab截取图片,np.array将图片转为数组,cvtColor将BRGA转为BRG,去掉了透明通道        return cv2.cvtColor(np.array(self.cap.grab(monitor)), cv2.COLOR_BGRA2BGR)    def update_img(self, img):        self.img = img    def get_img(self):        return self.img    def run(self):        SetForegroundWindow_f = 0  # 判断是否需要置顶窗口        while True:            # 判断是否按下 ctrl+U 窗口始终置顶            if keyboard.is_pressed('ctrl+U'):                while keyboard.is_pressed('ctrl+U'):                    continue                if SetForegroundWindow_f == 0:                    SetForegroundWindow_f = 1                    time.sleep(1)                    continue                else:                    SetForegroundWindow_f = 0            if self.img is None:                img = self.grab_screen_mss(self.mointor)            cv2.namedWindow(self.window_name, cv2.WINDOW_NORMAL)  # cv2.WINDOW_NORMAL 根据窗口大小设置图片大小            cv2.resizeWindow(self.window_name, self.RESZIE_WIN_WIDTH, self.RESIZE_WIN_HEIGHT)            cv2.imshow(self.window_name, img)            if SetForegroundWindow_f == 1:                shell = win32com.client.Dispatch("WScript.Shell")                shell.SendKeys('%')                win32gui.SetForegroundWindow(win32gui.FindWindow(None, self.window_name))                win32gui.ShowWindow(win32gui.FindWindow(None, self.window_name), win32con.SW_SHOW)            if cv2.waiTKEy(1) & 0XFF == self.Exit_key:  # 默认:ESC                cv2.destroyAllwindows()                exit("结束")

代码讲解

功能实现思路主要是使用 mss 库进行截图,并使用 OpenCV 库进行图像显示和处理。

首先,使用 argparse 库解析传入的参数,设置检测范围的大小。

然后,使用 mss 库实例化一个截图对象 cap 。

接着,设置屏幕的宽和高,并计算屏幕中心点的坐标。

之后,根据传入的参数计算游戏内截图区域的宽高和原点坐标,并将其保存在变量 mointor 中。

定义了一个函数 grab_screen_mss ,使用 cap.grab 截取图片,并用 np.array 将图片转为数组,然后用 cvtColor 将 BRGA 转为 BRG ,去掉了透明通道。

定义了一个 run 函数,在其中不断循环,判断是否按下 ctrl+U ,若按下,则窗口始终置顶。

然后调用 grab_screen_mss 函数获取截图,使用 cv2 库进行图像显示,并设置显示窗口的大小。

如果窗口需要置顶,则使用 win32com 库和 win32gui 库置顶窗口。

最后,使用 cv2 库的 waitKey 函数等待用户操作,按下 ESC 键退出程序。

调用示例

    sc = ScreenCapture()    sc.run()

参数解释:

   screen_frame : Tuple[int, int]
        屏幕宽高,分别为x,y    region : Tuple[float, float]        实际截图范围,分别为x,y,(1.0, 1.0)表示全屏检测,越低检测范围越小(始终保持屏幕中心为中心)    window_name : str        显示窗口名    exit_key : int        结束窗口的退出键值,为键盘各键对应的ASCII码值,默认是ESC键

其他

键盘各键对应的ASCII码值 (0x指16进制,delete键的ascii码值是0x2e,也即十进制的46)

0x1 鼠标左键
0x2 鼠标右键
0x3 CANCEL 键
0x4 鼠标中键
0x8 BACKSPACE 键
0x9 TAB 键
0xC CLEAR 键
0xD ENTER 键
0x10 SHIFT 键
0x11 CTRL 键
0x12 MENU 键
0x13 PAUSE 键
0x14 CAPS LOCK 键
0x1B ESC 键
0x20 SPACEBAR 键
0x21 PAGE UP 键
0x22 PAGE DOWN 键
0x23 END 键
0x24 HOME 键
0x25 LEFT ARROW 键
0x26 UP ARROW 键
0x27 RIGHT ARROW 键
0x28 DOWN ARROW 键
0x29 SELECT 键
0x2A PRINT SCREEN 键
0x2B EXECUTE 键
0x2C SNAPSHOT 键
0x2D INSERT 键
0x2E DELETE 键
0x2F HELP 键
0x90 NUM LOCK 键

A 至 Z 键与 A – Z 字母的 ASCII 码相同:

值 描述
65 A 键
66 B 键
67 C 键
68 D 键
69 E 键
70 F 键
71 G 键
72 H 键
73 I 键
74 J 键
75 K 键
76 L 键
77 M 键
78 N 键
79 O 键
80 P 键
81 Q 键
82 R 键
83 S 键
84 T 键
85 U 键
86 V 键
87 W 键
88 X 键
89 Y 键
90 Z 键

0 至 9 键与数字 0 – 9 的 ASCII 码相同:

值 描述
48 0 键
49 1 键
50 2 键
51 3 键
52 4 键
53 5 键
54 6 键
55 7 键
56 8 键
57 9 键

下列常数代表数字键盘上的键:

值 描述
0x60 0 键
0x61 1 键
0x62 2 键
0x63 3 键
0x64 4 键
0x65 5 键
0x66 6 键
0x67 7 键
0x68 8 键
0x69 9 键
0x6A MULTIPLICATION SIGN (*) 键
0x6B PLUS SIGN (+) 键
0x6C ENTER 键
0x6D MINUS SIGN (–) 键
0x6E DECIMAL POINT (.) 键
0x6F DIVISION SIGN (/) 键

下列常数代表功能键:

值 描述
0x70 F1 键
0x71 F2 键
0x72 F3 键
0x73 F4 键
0x74 F5 键
0x75 F6 键
0x76 F7 键
0x77 F8 键
0x78 F9 键
0x79 F10 键
0x7A F11 键
0x7B F12 键
0x7C F13 键
0x7D F14 键
0x7E F15 键
0x7F F16 键

来源地址:https://blog.csdn.net/weixin_45371411/article/details/128757738

--结束END--

本文标题: python简单实现对桌面进行实时捕捉画面

本文链接: https://lsjlt.com/news/385589.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • python简单实现对桌面进行实时捕捉画面
    介绍 最近在研究目标检测方面的小东西,需要到对桌面进行实时捕捉画面,获取画面后再检测,达到实时桌面目标检测的目的,所以写了一段小代码来实现该功能,实测速度很快,符合我的需求。特此记录一下。 代码 im...
    99+
    2023-08-31
    python
  • Python实现对桌面进行实时捕捉画面的方法详解
    目录介绍代码代码讲解调用示例其他介绍 最近在研究目标检测方面的小东西,需要到对桌面进行实时捕捉画面,获取画面后再检测,达到实时桌面目标检测的目的,所以写了一段小代码来实现该功能,实测...
    99+
    2023-01-28
    Python桌面实时捕捉画面 Python桌面实时捕捉 Python 实时捕捉
  • Python实现系统桌面时钟
    用Python + PyQT写的一个系统桌面时钟,刚学习Python,写的比较简陋,但是基本的功能还可以。 功能: ①窗体在应用程序最上层,不用但是打开其他应用后看不到时间 ②左键双击全屏,可以做小屏保使用,再次双击退出全屏。 ③系统托盘...
    99+
    2023-01-31
    时钟 桌面 系统
  • Android简单实现启动画面的方法
    本文实例讲述了Android简单实现启动画面的方法。分享给大家供大家参考,具体如下: 核心代码: package com.demo.app; import android.a...
    99+
    2022-06-06
    方法 启动 动画 Android
  • Android编程之简单启动画面实现方法
    本文实例讲述了Android简单启动画面实现方法。分享给大家供大家参考,具体如下: 每个Android应用程序启动之后都会出现一个Splash启动界面,显示产品LOGO、公司L...
    99+
    2022-06-06
    程之 方法 启动 动画 Android
  • javascript怎么实现简单页面倒计时
    小编给大家分享一下javascript怎么实现简单页面倒计时,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!具体如下:<!DOCTYPE html><html><head>&nb...
    99+
    2023-06-06
  • 如何进行Python Helloworld程序的简单实现
    本篇文章为大家展示了如何进行Python Helloworld程序的简单实现,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。对于一个学习过编程语言的朋友来说,肯定会对Helloworld这一词汇记忆深...
    99+
    2023-06-17
  • 简单实现python tkinter制作用户登录界面
    这篇文章主要介绍“简单实现python tkinter制作用户登录界面”,在日常操作中,相信很多人在简单实现python tkinter制作用户登录界面问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”简单实现p...
    99+
    2023-06-14
  • python tkinter制作用户登录界面的简单实现
    本文只是几年前学习的tkinter的时候写的测试程序,十分之简陋,只是学习用,没什么其他用处。 学习一下莫烦Python的tkinter教程,根据教程制作了用户登录注册页。基本功能为...
    99+
    2024-04-02
  • 70行Python代码实现一个桌面自动翻译工具
    目录PySimpleGUI是什么?使用步骤引入库构建爬虫url构建翻译函数GUI搭建逻辑执行语句界面效果总结工作上经常需要与外国友人邮件沟通,奈何工作电脑没有安装有道词典一类的翻译软...
    99+
    2024-04-02
  • 如何实现一个简单的Ajax页面无刷新进行用户验证案例
    这篇文章给大家分享的是有关如何实现一个简单的Ajax页面无刷新进行用户验证案例的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。效果如下图:实现主要过程:在UsersAction类中...
    99+
    2024-04-02
  • 怎么实现Golang跨平台进行GUI桌面应用程序开发
    本篇内容主要讲解“怎么实现Golang跨平台进行GUI桌面应用程序开发”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么实现Golang跨平台进行GUI桌面应用程序开发”吧!golang能开发桌...
    99+
    2023-06-16
  • Python利用CNN实现对时序数据进行分类
    目录一、数据集介绍二、数据预处理2.1 获取原始数据2.2 获取原始标签2.3 数据分割2.4 整合数据和标签2.5 保存三、数据训练3.1 读取数据并进行处理3.2 构建数据结构3...
    99+
    2023-02-22
    Python CNN时序数据分类 Python CNN数据分类 Python CNN
  • 使用计划任务实现Win8启动时快速越过Metro界面直接进入桌面
      1、在桌面上点击鼠标右键,选择“新建”,选择文本文档;   2、进入新建的文本文档,   [Shell]   Command=2   IconFile=Explorer.exe,3   [T...
    99+
    2023-06-06
    Win8 Metro界面 桌面 计划 Metro 界面 任务
  • websocket+Django+python+paramiko实现web页面执行命令并实时输出
    WebSocketWebSocket的工作流程:浏览器通过JavaScript向服务端发出建立WebSocket连接的请求,在WebSocket连接建立成功后,客户端和服务端就可以通过 TCP连接传输数据。因为WebSocket连接本质上是...
    99+
    2023-01-31
    实时 命令 页面
  • Python怎么用CNN实现对时序数据进行分类
    这篇“Python怎么用CNN实现对时序数据进行分类”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Python怎么用CNN实...
    99+
    2023-07-05
  • 如何用JS代码实现简单面向对象的颜色选择器
    今天小编给大家分享一下如何用JS代码实现简单面向对象的颜色选择器的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。具体代码如下:...
    99+
    2023-07-04
  • JS实现填报时怎么对修改过的单元格进行标识
    这期内容当中小编将会给大家带来有关JS实现填报时怎么对修改过的单元格进行标识,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。 描述在填报预览时,对单元格编辑后,其左上角有个红色标记,但非常不明显,用户很难注...
    99+
    2023-06-03
  • python爬虫简单的添加代理以及编写进行访问的实现代码
    python爬虫简单的添加代理以及编写进行访问的实现代码,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。在使用python对网页进行多次快速爬取的时候,访问次数过于频繁,服务...
    99+
    2023-06-02
  • Android开发----实现登录注册页面(创建本地数据库,对注册的账户密码进行存储)
    实现登录注册页面(创建本地数据库,对注册的账户密码进行存储) 写在前面: 本文实现了登录注册页面的开发,创建了本地数据库,存储注册的账户密码。注册账户为手机号,对账户为手机号进行了正则化验证。登录成功...
    99+
    2023-10-21
    数据库 android
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作