Python 使用 ImageGrab 进行屏幕录制
Python screen record using ImageGrab
我使用 pillow ImageGrab 在 python 中获得了录制屏幕的代码,但它在我的 python 3.5 版本中无法正常工作。视频的帧数不断减少。
import numpy as np
from PIL import ImageGrab
import cv2
import time
last_time = time.time()
while(True):
# 800x600 windowed mode
printscreen = np.array(ImageGrab.grab(bbox=(0,0,800,600)))
print('loop took {} seconds'.format(time.time()-last_time))
last_time = time.time()
cv2.imshow('window',cv2.cvtColor(printscreen, cv2.COLOR_BGR2RGB))
if cv2.waitKey(25) & 0xFF == ord('q'):
cv2.destroyAllWindows()
break
这是意料之中的。当您使用 cv2.imshow()
时,它会在屏幕上显示 window,并且会再次在 ImageGrab
中捕获。因此,如果您不显示图像而仅将它们保存为视频,则不会出现此问题。
要查看它是否按预期工作,您可以这样做,
printscreen = np.array(ImageGrab.grab(bbox=(0,0,200,200)))
这将仅捕获屏幕左上角的 200 X 200 像素。现在将 opencv
输出 window 拖离屏幕的左上角,您将看不到 window 在 window.
中的效果。
我使用 pillow ImageGrab 在 python 中获得了录制屏幕的代码,但它在我的 python 3.5 版本中无法正常工作。视频的帧数不断减少。
import numpy as np
from PIL import ImageGrab
import cv2
import time
last_time = time.time()
while(True):
# 800x600 windowed mode
printscreen = np.array(ImageGrab.grab(bbox=(0,0,800,600)))
print('loop took {} seconds'.format(time.time()-last_time))
last_time = time.time()
cv2.imshow('window',cv2.cvtColor(printscreen, cv2.COLOR_BGR2RGB))
if cv2.waitKey(25) & 0xFF == ord('q'):
cv2.destroyAllWindows()
break
这是意料之中的。当您使用 cv2.imshow()
时,它会在屏幕上显示 window,并且会再次在 ImageGrab
中捕获。因此,如果您不显示图像而仅将它们保存为视频,则不会出现此问题。
要查看它是否按预期工作,您可以这样做,
printscreen = np.array(ImageGrab.grab(bbox=(0,0,200,200)))
这将仅捕获屏幕左上角的 200 X 200 像素。现在将 opencv
输出 window 拖离屏幕的左上角,您将看不到 window 在 window.