使用Python實現(xiàn)屏幕截圖的兩種方法
環(huán)境配置
下載pyautogui包
pip install pyautogui -i https://pypi.tuna.tsinghua.edu.cn/simple/
下載OpenCV包
pip install opencv-python -i https://pypi.tuna.tsinghua.edu.cn/simple/
下載PyQT5包
pip install PyQt5 -i https://pypi.tuna.tsinghua.edu.cn/simple/
下載pypiwin32包
pip install pypiwin32 -i https://pypi.tuna.tsinghua.edu.cn/simple/
具體實現(xiàn)
【1】使用pyautogui方法實現(xiàn)截屏;
代碼
import pyautogui
import cv2
import numpy as np
# 下面的數(shù)字分別代表:左上角橫向坐標(biāo),左上角縱向坐標(biāo),截取圖像的寬度,截取圖像的高度;
img = pyautogui.screenshot(region=[0, 0, 1902, 1080])
# 將獲取的圖像轉(zhuǎn)換成二維矩陣形式,然后再將RGB轉(zhuǎn)成BGR
# 因為`imshow`默認(rèn)通道順序是`BGR`,而`pyautogui`默認(rèn)是`RGB`所以要轉(zhuǎn)換一下
img = cv2.cvtColor(np.asarray(img), cv2.COLOR_RGB2BGR)
cv2.imshow("截屏", img)
cv2.waitKey(0)
注釋
- 此方法不能指定獲取指定程序的窗口,因此窗口也不能被遮擋;
【2】使用win32gui方法實現(xiàn)截屏;
代碼
《1》
- 獲取目標(biāo)程序窗口的句柄和標(biāo)題;
- 打印所有窗口的
hwnd和title; - 根據(jù)窗口句柄就可以進(jìn)行指定截圖了;
import win32gui
# 創(chuàng)建字典保存窗口的句柄與名稱映射關(guān)系
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)
import win32gui
# GetDesktopWindow 獲得代表整個屏幕的一個窗口(桌面窗口)句柄
hd = win32gui.GetDesktopWindow()
# 獲取所有子窗口
hwndChildList = []
win32gui.EnumChildWindows(hd, lambda hwnd, param: param.append(hwnd), hwndChildList)
for hwnd in hwndChildList:
print("句柄:", hwnd, "標(biāo)題:", win32gui.GetWindowText(hwnd))
# f.write("句柄:" + str(hwnd) + " 標(biāo)題:" + win32gui.GetWindowText(hwnd) + '\n')
結(jié)果
3802250 mouseControle – OpenCVDemo.py
3278598 此電腦
《2》
- 使用
PyQt5進(jìn)行全屏的截取操作; - 如果想截取特定的窗口,只需要將
C:/Windows/system32/cmd.exe換成上一個程序中打印的title,并且保證那個窗口沒有被你最小化即可;
代碼
import sys import win32gui from PyQt5.QtWidgets import QApplication # 這個是全屏窗口 hwnd = win32gui.FindWindow(None, 'C:/Windows/system32/cmd.exe') # 這個是指定程序 # hwnd = win32gui.FindWindow(None, win32gui.GetWindowText(3212524)) app = QApplication(sys.argv) screen = QApplication.primaryScreen() img = screen.grabWindow(hwnd).toImage() img.save(r"C:\Users\SUNxRUN\Desktop\screenshot.jpg") # 前置窗口 win32gui.SetForegroundWindow(hwnd)
《3》
- 暫時廢棄;
- 實時使用
win32gui截屏用Mat格式顯示的核心程序;
代碼
import win32gui
import cv2
import numpy as np
from PIL import ImageGrab # 操作圖像
hwnd = win32gui.FindWindow(None, 'QQMail - Inbox - 360極速瀏覽器X 21.0')#第二個參數(shù)需要用二、a、那個程序運行來獲得
while True:
x_start, y_start, x_end, y_end = win32gui.GetWindowRect(hwnd)
# 坐標(biāo)信息
box = (x_start, y_start, x_end, y_end)
image = ImageGrab.grab(box)
img=cv2.cvtColor(np.asarray(image),cv2.COLOR_RGB2BGR)
cv2.imshow('Img',img)
cv2.waitKey(1)到此這篇關(guān)于使用Python實現(xiàn)屏幕截圖的兩種方法的文章就介紹到這了,更多相關(guān)Python 屏幕截圖內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Keras深度學(xué)習(xí)模型Sequential和Model詳解
這篇文章主要介紹了Keras深度學(xué)習(xí)模型Sequential和Model詳解,在Keras中有兩種深度學(xué)習(xí)的模型:序列模型(Sequential)和通用模型(Model),差異在于不同的拓?fù)浣Y(jié)構(gòu),,需要的朋友可以參考下2023-08-08
Python利用標(biāo)簽實現(xiàn)清理微信好友的自動化腳本
微信已經(jīng)成為我們?nèi)粘I钪胁豢苫蛉钡纳缃还ぞ?隨著使用時間的增長,我們的微信好友列表可能會變得越來越臃腫,所以本文為大家準(zhǔn)備了通過標(biāo)簽清理微信好友的Python自動化腳本,希望對大家有所幫助2024-12-12
Python中PyExecJS(執(zhí)行JS代碼庫)的具體使用
pyexecjs是一個用Python來執(zhí)行JavaScript代碼的工具庫,本文主要介紹了Python中PyExecJS(執(zhí)行JS代碼庫)的具體使用,具有一定的參考價值,感興趣的可以了解一下2024-02-02
Django使用Celery實現(xiàn)異步發(fā)送郵件
這篇文章主要為大家詳細(xì)介紹了Django如何使用Celery實現(xiàn)異步發(fā)送郵件的功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下2023-04-04

