Python实现屏幕截图与区域裁剪:PyAutoGUI与Pillow实操指南

七月
七月
发布时间:2026-10-11| 3人浏览过
原创

本文详解在Python中实现屏幕截图的常用方案。涵盖通过pyautogui直接捕获全屏、结合OpenCV转换色彩格式保存,以及利用Pillow按坐标精准截取局部区域。提供完整代码示例与环境配置指引,适合需要自动化图像采集或桌面辅助脚本的开发场景。

环境准备与依赖安装

在执行任何截图操作前,请确保已安装 Python 3.6+ 环境。以下依赖库可通过包管理工具一键获取,按需执行对应命令:

pip install pyautogui
pip install numpy opencv-python pillow

基于 PyAutoGUI 的全屏捕获方案

pyautogui 是桌面自动化领域的常用库,其 screenshot() 方法能直接抓取当前显示器的画面数据,默认返回 PIL 兼容的对象实例。

第1步:通过 save() 直接导出截图

目的:快速将当前屏幕渲染为本地图片文件。
入口:终端或 IDE 新建 Python 脚本。
动作:导入模块后调用截图方法,并指定目标文件名执行落盘。

import pyautogui
demo_image = pyautogui.screenshot()
demo_image.save("demo_one.jpg")

上述代码会立即捕获主显示器画面,并在工作目录生成 demo_one.jpg。若需等待界面加载完成后再触发捕捉,可在调用前插入 time.sleep(秒数) 进行缓冲。

使用PyAutoGUI默认screenshot生成的截图效果演示
运行基础截图文本后的原始成像结果

第2步:借助 OpenCV 完成颜色空间转换与存储

目的:满足后续图像处理流水线对 BGR 色彩通道的要求,避免直接使用 OpenCV 函数读取 RGB 数据时出现偏色。
入口:同上脚本文件。
动作:将 PIL 对象转为 NumPy 数组,调用 cv2.cvtColor 进行通道重排,最后用 imwrite 固化到磁盘。

# 导入所需模块
import numpy as np
import cv2
import pyautogui

# 使用 pyautogui 捕获屏幕
raw_image = pyautogui.screenshot()

# 转换为 NumPy 数组并完成 RGB 到 BGR 的映射
frame_array = np.array(raw_image)
converted_frame = cv2.cvtColor(frame_array, cv2.COLOR_RGB2BGR)

# 使用 OpenCV 保存最终图像
cv2.imwrite("demo_two.png", converted_frame)
结合OpenCV转换BGR色彩通道后的图像保存效果
验证通道转换后写入磁盘的图片状态

基于 Pillow 的区域范围截取

当仅需监控特定窗口或 UI 元素时,无需抓取全量像素。Pillow 提供的 ImageGrab 子模块允许通过四元组坐标定义感兴趣区域(ROI)。

第3步:配置 Pillow 抓取指定坐标区域

目的:缩小采样范围,降低内存占用并提升实时性。
入口:新建或修改现有脚本。
动作:定义左上角与右下角坐标,传入 grab 方法并执行保存。

from PIL import ImageGrab

# 坐标参数顺序:(左边缘, 上边缘, 右边缘, 下边缘) 
# 此处以像素为单位划定截取矩形
roi_coords = (200, 200, 600, 600)

region_image = ImageGrab.grab(roi_coords)
region_image.save("demo_three.jpg")
Pillow模块按坐标参数截取局部屏幕的实际输出
确认grab函数裁剪边界是否符合预期

旧版模块注意事项与常见问题

pyscreenshot 维护状态说明:早期教程常推荐的 pyscreenshot 模块目前已停止活跃维护,在多窗口布局与高 DPI 缩放环境下容易出现适配异常。历史路径与输出示例如下,仅供遗留项目对照查阅:

# 仅保留基础记录,不推荐新项目直接使用
import pyscreenshot
legacy_full = pyscreenshot.grab()
legacy_region = pyscreenshot.grab(bbox=(100, 100, 500, 500))
历史模块pyscreenshot全屏抓取残留输出
记录旧版接口的原始渲染痕迹
历史模块pyscreenshot区域抓取残留输出
记录旧版接口裁剪区域的对照底稿

常见问题排查

  • 权限不足拒绝访问:macOS 系统首次运行自动化脚本时,需在“系统设置 → 隐私与安全性 → 辅助功能”中授予终端或 IDE 屏幕录制权限。
  • 坐标越界无响应:grab() 的 bbox 参数若超出当前分辨率范围,部分操作系统会返回空白黑屏或抛出 IndexError。建议先通过 print(ImageGrab.grab().size) 获取物理尺寸基准。
  • 多显示器主副屏判定:pyautogui 默认作用于主显示器。如需切换目标屏幕,需传入 pyautogui.Screens(mainDisplay=True/False) 参数或调整系统显示排列顺序。

总结

本文梳理了 Python 生态下实现屏幕捕获的核心路径。通过 pyautogui 可快速完成全屏采集与格式转换,配合 OpenCV 能够无缝衔接后续的图像识别或流媒体推流逻辑;而 Pillow 的 ImageGrab 则提供了轻量级的 ROI 坐标裁剪能力。合理选择底层方案并结合多屏权限管理,即可构建稳定高效的桌面视觉采集链路。以上就是使用Python制作屏幕截图工具的详细内容,更多关于Python图像捕获与自动化控制的相关资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。