Python实现屏幕截图与区域裁剪:PyAutoGUI与Pillow实操指南
本文详解在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(秒数) 进行缓冲。

第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)

基于 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")

旧版模块注意事项与常见问题
pyscreenshot 维护状态说明:早期教程常推荐的 pyscreenshot 模块目前已停止活跃维护,在多窗口布局与高 DPI 缩放环境下容易出现适配异常。历史路径与输出示例如下,仅供遗留项目对照查阅:
# 仅保留基础记录,不推荐新项目直接使用
import pyscreenshot
legacy_full = pyscreenshot.grab()
legacy_region = pyscreenshot.grab(bbox=(100, 100, 500, 500))


常见问题排查
- 权限不足拒绝访问:macOS 系统首次运行自动化脚本时,需在“系统设置 → 隐私与安全性 → 辅助功能”中授予终端或 IDE 屏幕录制权限。
- 坐标越界无响应:grab() 的 bbox 参数若超出当前分辨率范围,部分操作系统会返回空白黑屏或抛出 IndexError。建议先通过 print(ImageGrab.grab().size) 获取物理尺寸基准。
- 多显示器主副屏判定:pyautogui 默认作用于主显示器。如需切换目标屏幕,需传入 pyautogui.Screens(mainDisplay=True/False) 参数或调整系统显示排列顺序。
总结
本文梳理了 Python 生态下实现屏幕捕获的核心路径。通过 pyautogui 可快速完成全屏采集与格式转换,配合 OpenCV 能够无缝衔接后续的图像识别或流媒体推流逻辑;而 Pillow 的 ImageGrab 则提供了轻量级的 ROI 坐标裁剪能力。合理选择底层方案并结合多屏权限管理,即可构建稳定高效的桌面视觉采集链路。以上就是使用Python制作屏幕截图工具的详细内容,更多关于Python图像捕获与自动化控制的相关资料请关注本站其它相关文章!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









