当前位置: 首页 > article >正文

【Python-随笔】使用Python实现屏幕截图

使用Python实现屏幕截图

环境配置

下载pyautogui

pip install pyautogui -i https://pypi.tuna.tsinghua.edu.cn/simple/

下载OpenCV

pip install opencv-python -i https://pypi.tuna.tsinghua.edu.cn/simple/

下载PyQT5

pip install PyQt5 -i https://pypi.tuna.tsinghua.edu.cn/simple/

下载pypiwin32

pip install pypiwin32 -i https://pypi.tuna.tsinghua.edu.cn/simple/

具体实现

【1】

说明

  • 使用pyautogui方法实现截屏;

代码

import pyautogui
import cv2
import numpy as np

# 下面的数字分别代表:左上角横向坐标,左上角纵向坐标,截取图像的宽度,截取图像的高度;
img = pyautogui.screenshot(region=[0, 0, 1902, 1080])
# 将获取的图像转换成二维矩阵形式,然后再将RGB转成BGR
# 因为`imshow`默认通道顺序是`BGR`,而`pyautogui`默认是`RGB`所以要转换一下
img = cv2.cvtColor(np.asarray(img), cv2.COLOR_RGB2BGR)

cv2.imshow("截屏", img)
cv2.waitKey(0)

注释

  • 此方法不能指定获取指定程序的窗口,因此窗口也不能被遮挡;

【2】

说明

  • 使用win32gui方法实现截屏;

代码

《1》

  • 获取目标程序窗口的句柄和标题;
  • 打印所有窗口的hwndtitle
  • 根据窗口句柄就可以进行指定截图了;
import win32gui

# 创建字典保存窗口的句柄与名称映射关系
hwnd_title = dict()


def get_all_hwnd(hwnd, mouse):
    if win32gui.IsWindow(hwnd) and win32gui.IsWindowEnabled(hwnd) and win32gui.IsWindowVisible(hwnd):
        hwnd_title.update({hwnd: win32gui.GetWindowText(hwnd)})


win32gui.EnumWindows(get_all_hwnd, 0)

for h, t in hwnd_title.items():
    if t != "":
        print(h, t)
import win32gui

# GetDesktopWindow 获得代表整个屏幕的一个窗口(桌面窗口)句柄
hd = win32gui.GetDesktopWindow()

# 获取所有子窗口
hwndChildList = []

win32gui.EnumChildWindows(hd, lambda hwnd, param: param.append(hwnd), hwndChildList)

for hwnd in hwndChildList:
    print("句柄:", hwnd, "标题:", win32gui.GetWindowText(hwnd))
    # f.write("句柄:" + str(hwnd) + " 标题:" + win32gui.GetWindowText(hwnd) + '\n')

结果

3802250 mouseControle – OpenCVDemo.py
3278598 此电脑

《2》

  • 使用PyQt5进行全屏的截取操作;
  • 如果想截取特定的窗口,只需要将C:/Windows/system32/cmd.exe换成上一个程序中打印的title,并且保证那个窗口没有被你最小化即可;

代码

import sys
import win32gui
from PyQt5.QtWidgets import QApplication
# 这个是全屏窗口
hwnd = win32gui.FindWindow(None, 'C:/Windows/system32/cmd.exe')
# 这个是指定程序
# hwnd = win32gui.FindWindow(None, win32gui.GetWindowText(3212524))
app = QApplication(sys.argv)
screen = QApplication.primaryScreen()
img = screen.grabWindow(hwnd).toImage()
img.save(r"C:\Users\SUNxRUN\Desktop\screenshot.jpg")
# 前置窗口 win32gui.SetForegroundWindow(hwnd)

《3》

  • 暂时废弃;
  • 实时使用win32gui截屏用Mat格式显示的核心程序;

代码

import win32gui
import cv2
import numpy as np
from PIL import ImageGrab  # 操作图像
hwnd = win32gui.FindWindow(None, 'QQMail - Inbox - 360极速浏览器X 21.0')#第二个参数需要用二、a、那个程序运行来获得
while True:
    x_start, y_start, x_end, y_end = win32gui.GetWindowRect(hwnd)
    # 坐标信息
    box = (x_start, y_start, x_end, y_end)
    image = ImageGrab.grab(box)
    img=cv2.cvtColor(np.asarray(image),cv2.COLOR_RGB2BGR)
    cv2.imshow('Img',img)
    cv2.waitKey(1)

http://www.kler.cn/a/154497.html

相关文章:

  • Cuda和Pytorch的兼容性
  • 海康大华宇视视频平台EasyCVR私有化视频平台服务器选购主要参数有哪些?
  • 基于Lora通讯加STM32空气质量检测WIFI通讯
  • 【操作系统不挂科】<Linux进程概念(4)>选择题(带答案与解析)
  • 概率论公式整理
  • LLMs之Code:Qwen2.5-Coder的简介、安装和使用方法、案例应用之详细攻略
  • 安卓密码框、EditText
  • 基于 HarmonyOS 的用户登录界面实现
  • Pytorch:torch.optim详解
  • 【kafka实践】11|消费位移提交
  • vue之mixin混入
  • 005、简单页面-容器组件
  • IDC MarketScape2023年分布式数据库报告:OceanBase位列“领导者”类别,产品能力突出
  • MySQL- CRUD-单表查询
  • Redis集群详解
  • gRPC Java、Go、PHP使用例子
  • 我爱上这38个酷炫的数据大屏(附 Python 源码)
  • ⭐ Unity 里让 Shader 动画在 Scene 面板被持续刷新
  • spring boot定时器实现定时同步数据
  • 深入理解Java中继承的高级使用方案
  • 不可抗力因素包括什么内容
  • 编译ubuntu kernel
  • 软件工程 - 第8章 面向对象建模 - 4 - 物理体系结构建模
  • 【Android知识笔记】性能优化专题(五)
  • php 中生成订单号
  • Adobe Bridge——牵线搭桥