用Python实现屏幕截图详解


Posted in Python onJanuary 22, 2022

一、序言

在csdn上有很多纯copy,这给我复现带来了很大的麻烦,所以我想根据我的个人找截图的经历记录下来,给未来的自己看,免得忘记了云云。
由于我比较喜欢用opencv处理图像,所以截屏最后都会附带一个使用opencv显示图片的一个步骤。

二、环境配置

1、下载pyautogui包

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

注:使用pyautogui方法获取截屏的话,只下载这个就行了

2、下载opencv-python包

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

注:方便实现对图片的进一步处理,比如实时获取云云。

3、下载PyQt5包

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

注:使用PyQt方法截屏下载介个

4、下载pypiwin32包

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

注:使用PyQt方法截屏下载介个

三、屏幕截屏源码与解析

1、使用pyautogui方法实现截屏

import pyautogui
import cv2
import numpy as np

img = pyautogui.screenshot(region=[300,50, 200, 100])  # 分别代表:左上角坐标,宽高
#对获取的图片转换成二维矩阵形式,后再将RGB转成BGR
#因为imshow,默认通道顺序是BGR,而pyautogui默认是RGB所以要转换一下,不然会有点问题
img = cv2.cvtColor(np.asarray(img), cv2.COLOR_RGB2BGR)

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

优点:

方便快捷,容易写核心部分就一行.速度快0.04s左右,基本可以达到实时截屏的效果。可以自由确定截屏区域

缺点:

但是不能指定获取程序的窗口,因此窗口也不能遮挡。 2、使用PyQt方法实现截屏 a.获取窗口的句柄,也就是目标窗口名title。

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)

注:程序会打印所有窗口的hwnd和title,有了title就可以进行截图了。

b.使用PyQt5截屏核心程序

from PyQt5.QtWidgets import QApplication
import win32gui
import sys
#这个是截取全屏的
hwnd = win32gui.FindWindow(None, 'C:/Windows/system32/cmd.exe')
app = QApplication(sys.argv)
screen = QApplication.primaryScreen()
img = screen.grabWindow(hwnd).toImage()
img.save("screenshot.jpg")

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

优点:

方便快捷,容易写核心部分就一行.速度快0.04s左右,基本可以达到实时截屏的效果。可以自由确定要截屏的窗口

缺点:

不可以自由确定截屏区域 c.使用PyQt5截屏用Mat格式显示的核心程序

def convertQImageToMat(incomingImage):
    '''  Converts a QImage into an opencv MAT format  '''
    # Format_RGB32 = 4,存入格式为B,G,R,A 对应 0,1,2,3
    # RGB32图像每个像素用32比特位表示,占4个字节,
    # R,G,B分量分别用8个bit表示,存储顺序为B,G,R,最后8个字节保留
    incomingImage = incomingImage.convertToFormat(4)
    width = incomingImage.width()
    height = incomingImage.height()

    ptr = incomingImage.bits()
    ptr.setsize(incomingImage.byteCount())
    arr = np.array(ptr).reshape(height, width, 4)  # Copies the data
    # arr为BGRA,4通道图片
    return arr

from PyQt5.QtWidgets import QApplication
import win32gui
import sys
import cv2
import numpy as np
hwnd = win32gui.FindWindow(None, '剑士之魂中文版小游戏,在线玩,4399小游戏 - 360安全浏览器 13.1')
app = QApplication(sys.argv)
screen = QApplication.primaryScreen()
img = screen.grabWindow(hwnd).toImage()

img=convertQImageToMat(img)#将获取的图像从QImage转换为RBG格式
cv2.imshow("asd",img)      #imshow
cv2.waitKey(0)

四、结语

我再查询了多个截屏的方法之后,发现就学会这两种截屏方法即可,所以就没有再放其他方法了

到此这篇关于用Python实现屏幕截图详解的文章就介绍到这了,更多相关Python屏幕截图内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python实现zencart产品数据导入到magento(python导入数据)
Apr 03 Python
python计算圆周长、面积、球体体积并画出圆
Apr 08 Python
Python实现的rsa加密算法详解
Jan 24 Python
介绍一款python类型检查工具pyright(推荐)
Jul 03 Python
Python解析json时提示“string indices must be integers”问题解决方法
Jul 31 Python
Python封装成可带参数的EXE安装包实例
Aug 24 Python
Python图像处理库PIL的ImageFont模块使用介绍
Feb 26 Python
pycharm实现print输出保存到txt文件
Jun 01 Python
Python延迟绑定问题原理及解决方案
Aug 04 Python
python文件路径操作方法总结
Dec 21 Python
python读取excel数据并且画图的实现示例
Feb 08 Python
深入浅析Django MTV模式
Sep 04 Python
Python实现学生管理系统并生成exe可执行文件详解流程
Jan 22 #Python
django中websocket的具体使用
Jan 22 #Python
Django+Nginx+uWSGI 定时任务的实现方法
Jan 22 #Python
梳理总结Python开发中需要摒弃的18个坏习惯
Jan 22 #Python
Pandas搭配lambda组合使用详解
Jan 22 #Python
Python中的tkinter库简单案例详解
Jan 22 #Python
解析python中的jsonpath 提取器
Jan 18 #Python
You might like
动态新闻发布的实现及其技巧
2006/10/09 PHP
PHP应用JSON技巧讲解
2013/02/03 PHP
解析用PHP实现var_export的详细介绍
2013/06/20 PHP
php多文件上传实现代码
2014/02/20 PHP
Extjs Ajax 乱码问题解决方案
2009/04/15 Javascript
关于eval 与new Function 到底该选哪个?
2013/04/17 Javascript
javascript scrollTop正解使用方法
2013/11/14 Javascript
通过$(this)使用jQuery包装后的方法或属性
2014/05/18 Javascript
jQuery中animate用法实例分析
2015/03/09 Javascript
jQuery Mobile中的button按钮组件基础使用教程
2016/05/23 Javascript
jQuery查找节点方法完整实例
2016/09/13 Javascript
详解vue-cli中模拟数据的两种方法
2018/07/03 Javascript
小程序实现左滑删除功能
2018/10/30 Javascript
vue表单验证你真的会了吗?vue表单验证(form)validate
2019/04/07 Javascript
vue 实现搜索的结果页面支持全选与取消全选功能
2019/05/10 Javascript
jQuery实现动态生成年月日级联下拉列表示例
2019/05/11 jQuery
JavaScript实现背景自动切换小案例
2019/09/27 Javascript
Vertx基于EventBus发送接受自定义对象
2020/11/16 Javascript
Python实现数据库编程方法详解
2015/06/09 Python
Appium+python自动化之连接模拟器并启动淘宝APP(超详解)
2019/06/17 Python
django之静态文件 django 2.0 在网页中显示图片的例子
2019/07/28 Python
python实现while循环打印星星的四种形状
2019/11/23 Python
python pygame实现球球大作战
2019/11/25 Python
Django模型中字段属性choice使用说明
2020/03/30 Python
python中@property的作用和getter setter的解释
2020/12/22 Python
Python lxml库的简单介绍及基本使用讲解
2020/12/22 Python
Molly Bracken法国电子商店:法国女性时尚品牌
2019/07/24 全球购物
高中生操行评语
2014/04/25 职场文书
小学毕业演讲稿
2014/04/25 职场文书
环保倡议书50字
2014/05/15 职场文书
冬季安全检查方案
2014/05/23 职场文书
离婚协议书格式
2015/01/26 职场文书
介绍信怎么写
2015/01/30 职场文书
工资证明格式模板
2015/06/12 职场文书
工作时间证明
2015/06/15 职场文书
MySQL示例讲解数据库约束以及表的设计
2022/06/16 MySQL