使用Python實(shí)現(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/
具體實(shí)現(xiàn)
【1】使用pyautogui方法實(shí)現(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 # 因?yàn)閌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方法實(shí)現(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 獲得代表整個(gè)屏幕的一個(gè)窗口(桌面窗口)句柄 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
換成上一個(gè)程序中打印的title
,并且保證那個(gè)窗口沒(méi)有被你最小化即可;
代碼
import sys import win32gui from PyQt5.QtWidgets import QApplication # 這個(gè)是全屏窗口 hwnd = win32gui.FindWindow(None, 'C:/Windows/system32/cmd.exe') # 這個(gè)是指定程序 # 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》
- 暫時(shí)廢棄;
- 實(shí)時(shí)使用
win32gui
截屏用Mat格式顯示的核心程序;
代碼
import win32gui import cv2 import numpy as np from PIL import ImageGrab # 操作圖像 hwnd = win32gui.FindWindow(None, 'QQMail - Inbox - 360極速瀏覽器X 21.0')#第二個(gè)參數(shù)需要用二、a、那個(gè)程序運(yùn)行來(lái)獲得 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實(shí)現(xiàn)屏幕截圖的兩種方法的文章就介紹到這了,更多相關(guān)Python 屏幕截圖內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
pytest參數(shù)化:@pytest.mark.parametrize詳解
pytest.mark.parametrize裝飾器能夠?qū)y(cè)試函數(shù)進(jìn)行參數(shù)化處理,使得一個(gè)測(cè)試函數(shù)可以用多組數(shù)據(jù)執(zhí)行多次,這有助于檢查不同輸入下的期望輸出是否匹配,提高測(cè)試的效率和覆蓋率,裝飾器可以應(yīng)用于函數(shù)、模塊或類,支持多個(gè)裝飾器組合使用,增強(qiáng)測(cè)試的靈活性和綜合性2024-10-10python讀取圖像矩陣文件并轉(zhuǎn)換為向量實(shí)例
這篇文章主要介紹了python讀取圖像矩陣文件并轉(zhuǎn)換為向量實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-06-06Python可以實(shí)現(xiàn)棧的結(jié)構(gòu)嗎
在本篇文章里小編給各位整理的是關(guān)于Python實(shí)現(xiàn)棧的結(jié)構(gòu)的條件的相關(guān)知識(shí)點(diǎn),有需要的朋友們可以學(xué)習(xí)下。2020-05-05python 根據(jù)時(shí)間來(lái)生成唯一的字符串方法
今天小編就為大家分享一篇python 根據(jù)時(shí)間來(lái)生成唯一的字符串方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-01-01python3 xpath和requests應(yīng)用詳解
這篇文章主要介紹了python3 xpath和requests應(yīng)用詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-03-03基于python實(shí)現(xiàn)雪花算法過(guò)程詳解
這篇文章主要介紹了基于python實(shí)現(xiàn)雪花算法過(guò)程詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-11-11Python3 pandas.concat的用法說(shuō)明
這篇文章主要介紹了Python3 pandas.concat的用法說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-03-03使用Python+Flask開發(fā)博客項(xiàng)目并實(shí)現(xiàn)內(nèi)網(wǎng)穿透
Flask是一個(gè)使用python編寫的輕量級(jí)Web框架,這篇文章我們將使用這個(gè)框架編寫一個(gè)屬于自己的博客網(wǎng)站!并教你如何通過(guò)使用內(nèi)網(wǎng)穿透工具處理項(xiàng)目,讓本地的項(xiàng)目可以在公網(wǎng)訪問(wèn),感興趣的可以了解一下2021-11-11