用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 相关文章推荐
django实现用户登陆功能详解
Dec 11 Python
Python3使用pandas模块读写excel操作示例
Jul 03 Python
Tensorflow 合并通道及加载子模型的方法
Jul 26 Python
python matplotlib拟合直线的实现
Nov 19 Python
Python中if有多个条件处理方法
Feb 26 Python
Django实现从数据库中获取到的数据转换为dict
Mar 27 Python
Pycharm无法打开双击没反应的问题及解决方案
Aug 17 Python
Django DRF APIView源码运行流程详解
Aug 17 Python
python 实现非极大值抑制算法(Non-maximum suppression, NMS)
Oct 15 Python
python openpyxl模块的使用详解
Feb 25 Python
Github 使用python对copilot做些简单使用测试
Apr 14 Python
Python3使用Qt5来实现简易的五子棋小游戏
May 02 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
php压缩HTML函数轻松实现压缩html/js/Css及注意事项
2013/01/27 PHP
PHP根据传来的16进制颜色代码自动改变背景颜色
2014/06/13 PHP
控制页面按钮在后台执行期间不重复提交的JS方法
2013/06/24 Javascript
jQuery计算textarea中文字数(剩余个数)的小程序
2013/11/28 Javascript
node.js中的buffer.toString方法使用说明
2014/12/14 Javascript
js实现简易的单数字随机抽奖(0-9)
2020/03/19 Javascript
理解javascript中的闭包
2017/01/11 Javascript
Javascript 链式作用域详细介绍
2017/02/23 Javascript
node.js入门学习之url模块
2017/02/25 Javascript
react中使用swiper的具体方法
2018/05/15 Javascript
vue-cli3+typescript初体验小结
2019/02/28 Javascript
vue中引入mxGraph的步骤详解
2019/05/17 Javascript
Python 爬虫多线程详解及实例代码
2016/10/08 Python
对Python 2.7 pandas 中的read_excel详解
2018/05/04 Python
详解python 利用echarts画地图(热力图)(世界地图,省市地图,区县地图)
2019/08/06 Python
python 生成器和迭代器的原理解析
2019/10/12 Python
pycharm运行程序时看不到任何结果显示的解决
2020/02/21 Python
在PyCharm中遇到pip安装 失败问题及解决方案(pip失效时的解决方案)
2020/03/10 Python
CSS3圆角边框和边界图片效果实例
2016/07/01 HTML / CSS
戴尔美国官方折扣店:Dell Outlet
2018/02/13 全球购物
美国牛仔品牌:True Religion
2018/11/16 全球购物
美国地毯购买网站:Rugs USA
2019/02/23 全球购物
用C语言实现文件读写操作
2013/10/27 面试题
工程部经理岗位职责
2013/12/08 职场文书
校园报刊亭创业计划书
2014/01/02 职场文书
关于毕业的中学校园广播稿
2014/01/26 职场文书
喝酒检查书范文
2014/02/23 职场文书
企业宣传标语
2014/06/09 职场文书
政治学专业毕业生求职信
2014/08/11 职场文书
学生夜不归宿检讨书
2014/09/23 职场文书
简历自荐信范文
2015/03/09 职场文书
2016年大学自主招生自荐信范文
2015/03/24 职场文书
2015年党风廉政建设目标责任书
2015/05/08 职场文书
财务管理制度范本
2015/08/04 职场文书
2016年教师节慰问信
2015/12/01 职场文书
Go语言-为什么返回值为接口类型,却返回结构体
2021/04/24 Golang