我目前正在做一個專案,我需要從螢屏的特定區域截取 30x40 像素的螢屏截圖。這并不是很難做到,因為有很多方法可以做到這一點。
我遇到的問題是我需要以我提到的大小每秒拍攝大約 10 到 15 個螢屏截圖。當我查看其中一些捕獲螢屏的方法時,我發現當您為它們提供較小選擇的引數時,會涉及到裁剪。因此正在拍攝完整的螢屏截圖,然后該方法將其裁剪為給定的大小。如果我只打算使用 30x40 的影像,這似乎是一種資源浪費,尤其是考慮到我會截取數千張截圖。
所以我的問題是:有沒有一種方法只捕獲螢屏的一部分而不捕獲整個螢屏,從大螢屏截圖中剪切出所需的部分?我目前正在使用這個命令:
im = pyautogui.screenshot(region=(0,0, 30, 40)).
uj5u.com熱心網友回復:
Python mss 模塊(https://github.com/BoboTiG/python-mss、https://python-mss.readthedocs.io/examples.html ) ,一個使用ctypes的純 Python 中的超快速跨平臺多螢屏截圖模塊(其中 MSS 代表 Multiple Screen Shots ),就是您要找的東西。螢屏截圖的速度足以從視頻中捕獲幀,螢屏的部分越小,捕獲的速度就越快(因此顯然不涉及裁剪)。一探究竟。mss.mss().grab()遠遠跑贏PIL.ImageGrab.grab()。下面的代碼示例顯示了如何獲取螢屏截影像??素的資料(允許檢測更改):
import mss
from time import perf_counter as T
left = 0
right = 2
top = 0
btm = 2
with mss.mss() as sct:
# parameter for sct.grab() can be:
monitor = sct.monitors[1] # entire screen
bbox = (left, top, right, btm) # screen part to capture
sT=T()
sct_im = sct.grab(bbox) # type: <class 'mss.screenshot.ScreenShot'>
eT=T();print(" >", eT-sT) # > 0.0003100260073551908
print(len(sct_im.raw), sct_im.raw)
# 16 bytearray(b'-12\xff\x02DU\xff-12\xff"S_\xff')
print(len(sct_im.rgb), sct_im.rgb)
# 12 b'21-UD\x0221-_S"'
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/483301.html
標籤:Python python-3.x 图片 图像处理 截屏
上一篇:如何在有噪點的影像中定位圓圈?
