使用Python实现屏幕截图的两种方法

 更新时间:2023年12月04日 09:37:16   作者:SUNxRUN  
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)

到此这篇关于使用Python实现屏幕截图的两种方法的文章就介绍到这了,更多相关Python 屏幕截图内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家! 

相关文章

  • 初识Pytorch使用transforms的代码

    初识Pytorch使用transforms的代码

    tansforms功能类似于在计算机视觉流程里的图像预处理部分的数据增强,接下来通过代码介绍下Pytorch使用transforms的详细过程,感兴趣的朋友一起看看吧
    2021-12-12
  • pytest参数化:@pytest.mark.parametrize详解

    pytest参数化:@pytest.mark.parametrize详解

    pytest.mark.parametrize装饰器能够对测试函数进行参数化处理,使得一个测试函数可以用多组数据执行多次,这有助于检查不同输入下的期望输出是否匹配,提高测试的效率和覆盖率,装饰器可以应用于函数、模块或类,支持多个装饰器组合使用,增强测试的灵活性和综合性
    2024-10-10
  • python读取图像矩阵文件并转换为向量实例

    python读取图像矩阵文件并转换为向量实例

    这篇文章主要介绍了python读取图像矩阵文件并转换为向量实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-06-06
  • 使用python生成目录树

    使用python生成目录树

    这篇文章主要为大家详细介绍了使用python生成目录树、文件的程序,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-03-03
  • Python可以实现栈的结构吗

    Python可以实现栈的结构吗

    在本篇文章里小编给各位整理的是关于Python实现栈的结构的条件的相关知识点,有需要的朋友们可以学习下。
    2020-05-05
  • python 根据时间来生成唯一的字符串方法

    python 根据时间来生成唯一的字符串方法

    今天小编就为大家分享一篇python 根据时间来生成唯一的字符串方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-01-01
  • python3 xpath和requests应用详解

    python3 xpath和requests应用详解

    这篇文章主要介绍了python3 xpath和requests应用详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-03-03
  • 基于python实现雪花算法过程详解

    基于python实现雪花算法过程详解

    这篇文章主要介绍了基于python实现雪花算法过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-11-11
  • Python3 pandas.concat的用法说明

    Python3 pandas.concat的用法说明

    这篇文章主要介绍了Python3 pandas.concat的用法说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-03-03
  • 使用Python+Flask开发博客项目并实现内网穿透

    使用Python+Flask开发博客项目并实现内网穿透

    Flask是一个使用python编写的轻量级Web框架,这篇文章我们将使用这个框架编写一个属于自己的博客网站!并教你如何通过使用内网穿透工具处理项目,让本地的项目可以在公网访问,感兴趣的可以了解一下
    2021-11-11

最新评论