用Python实现屏幕截图详解

 更新时间:2022年01月21日 15:22:52   作者:风吹落叶花飘荡  
大家好,本篇文章主要讲的是用Python实现屏幕截图详解,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下

一、序言

在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屏幕截图内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 简介Django中内置的一些中间件

    简介Django中内置的一些中间件

    这篇文章主要介绍了简介Django中内置的一些中间件,Django是最具人气的Python web开发框架,需要的朋友可以参考下
    2015-07-07
  • python中字典dict常用操作方法实例总结

    python中字典dict常用操作方法实例总结

    这篇文章主要介绍了python中字典dict常用操作方法,实例总结了Python针对字典操作的技巧,非常具有实用价值,需要的朋友可以参考下
    2015-04-04
  • python中delattr删除对象方法的代码分析

    python中delattr删除对象方法的代码分析

    在本篇文章里小编给大家分享了一篇关于python中delattr删除对象方法的代码分析内容,有兴趣的朋友们可以学习下。
    2020-12-12
  • Python读大数据txt

    Python读大数据txt

    本文通过2个例子给大家介绍了如何使用python实现读取大文件txt的方法,有需要的小伙伴可以参考下
    2016-03-03
  • python列表推导式的原理及使用方法

    python列表推导式的原理及使用方法

    这篇文章主要介绍了python列表推导式的原理及使用方法,列表推导式即list comprehension,有时也被翻译为列表解析式,是一种创建列表的简洁语法,更多详细内容需要的小伙伴可以参考一下下面文章相关资料
    2022-03-03
  • Python利用 SVM 算法实现识别手写数字

    Python利用 SVM 算法实现识别手写数字

    支持向量机 (Support Vector Machine, SVM) 是一种监督学习技术,它通过根据指定的类对训练数据进行最佳分离,从而在高维空间中构建一个或一组超平面。本文将介绍通过SVM算法实现手写数字的识别,需要的可以了解一下
    2021-12-12
  • 使用Python模块进行数据处理的详细步骤

    使用Python模块进行数据处理的详细步骤

    Python 提供了丰富的模块和库,用于处理各种类型的数据,本文介绍了一些常用的模块和库,以及如何使用它们进行数据处理的详细步骤和代码示例,对我们的学习或工作有一定的帮助,需要的朋友可以参考下
    2025-02-02
  • 给numpy.array增加维度的超简单方法

    给numpy.array增加维度的超简单方法

    这篇文章主要介绍了给numpy.array增加维度的超简单方法,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-06-06
  • python爬虫实现中英翻译词典

    python爬虫实现中英翻译词典

    这篇文章主要为大家详细介绍了python爬虫实现中英翻译词典,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-06-06
  • 简单谈谈Python中的反转字符串问题

    简单谈谈Python中的反转字符串问题

    本文给大家总结了5种可以实现python中反转字符串的方法,非常的实用,有需要的小伙伴可以参考下
    2016-10-10

最新评论