用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中用max()方法求最大值的介绍
May 15 Python
实践Python的爬虫框架Scrapy来抓取豆瓣电影TOP250
Jan 20 Python
Python读取图片为16进制表示简单代码
Jan 19 Python
python中实现数组和列表读取一列的方法
Apr 03 Python
numpy中的delete删除数组整行和整列的实例
May 09 Python
python中将zip压缩包转为gz.tar的方法
Oct 18 Python
Python嵌套式数据结构实例浅析
Mar 05 Python
使用python进行广告点击率的预测的实现
Jul 04 Python
Django MEDIA的配置及用法详解
Jul 25 Python
pytorch 多分类问题,计算百分比操作
Jul 09 Python
解决Python安装cryptography报错问题
Sep 03 Python
python中random.randint和random.randrange的区别详解
Sep 20 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 数据库树的遍历方法
2009/02/06 PHP
php去除html标记的原生函数详解
2015/01/27 PHP
php生成Android客户端扫描可登录的二维码
2016/05/13 PHP
filemanage功能中用到的common.js
2007/04/08 Javascript
jQuery ajax cache缓存问题
2010/07/01 Javascript
基于jquery插件实现常见的幻灯片效果
2013/11/01 Javascript
javascript学习笔记(一)基础知识
2014/09/30 Javascript
jquery实现导航固定顶部的效果仿蘑菇街
2014/10/22 Javascript
JS获取图片lowsrc属性的方法
2015/04/01 Javascript
基于jQuery实现以手风琴方式展开和折叠导航菜单
2016/01/28 Javascript
jquery+ajax实现直接提交表单实例分析
2016/06/17 Javascript
AngularJS实践之使用NgModelController进行数据绑定
2016/10/08 Javascript
微信小程序 实战程序简易新闻的制作
2017/01/09 Javascript
js实现显示手机号码效果
2017/03/09 Javascript
浅谈MUI框架中加载外部网页或服务器数据的方法
2018/01/31 Javascript
微信小程序开发之路由切换页面重定向问题
2018/09/18 Javascript
JS实现判断有效的数独算法示例
2019/02/25 Javascript
vue实现鼠标移入移出事件代码实例
2019/03/27 Javascript
从零搭一个自用的前端脚手架的方法步骤
2019/09/23 Javascript
VUE 实现动态给对象增加属性,并触发视图更新操作示例
2019/11/29 Javascript
javascript canvas实现简易时钟例子
2020/09/05 Javascript
[01:46]2020完美世界全国高校联赛秋季赛报名开启
2020/10/15 DOTA
零基础写python爬虫之神器正则表达式
2014/11/06 Python
Python3编程实现获取阿里云ECS实例及监控的方法
2017/08/18 Python
win10 64bit下python NLTK安装教程
2018/09/19 Python
这可能是最好玩的python GUI入门实例(推荐)
2019/07/19 Python
pyqt5数据库使用详细教程(打包解决方案)
2020/03/25 Python
Python xlrd模块导入过程及常用操作
2020/06/10 Python
基于Python中Remove函数的用法讨论
2020/12/11 Python
利用HTML5 Canvas制作一个简单的打飞机游戏
2015/05/11 HTML / CSS
FLOS美国官网:意大利高级照明工艺的传奇
2018/08/07 全球购物
新加坡领先的在线生活方式和杂货购物网站:EAMART
2019/04/02 全球购物
街头时尚在线:JESSICABUURMAN
2019/06/16 全球购物
4S店收银员岗位职责
2015/04/07 职场文书
植树节新闻稿
2015/07/17 职场文书
python使用tkinter实现透明窗体上绘制随机出现的小球(实例代码)
2021/05/17 Python