python - PIL ImagineGrab 只返回 Mac 上的背景图像,而不是我想的屏幕抓取
问题描述
我正在使用 macOS Big Sur 11.2.3、Python 3.9.4
当我运行以下代码时,我得到一个更新的“打印屏幕”,但是,图像只是背景图像和菜单栏(苹果符号、聚焦应用程序、文件、编辑......)。屏幕上没有出现其他应用程序窗口。
如果我选择不同的应用程序,比如 Safari,菜单栏会发生变化(聚焦的应用程序和菜单项),但图像的其余部分继续只显示背景图像。我正在尝试获取屏幕抓取,就像我在使用类似代码的教程中看到的那样;但是,它可能只是 Windows 的东西,文档似乎另有建议。建议表示赞赏。
import numpy as np
from PIL import ImageGrab
from cv2 import cv2
import time
def screen_record():
last_time = time.time()
while(True):
printscreen = np.array(ImageGrab.grab())
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
screen_record()
解决方案
对我来说,解决方案是让正在执行的应用程序(VSCode、iTerm)抓取屏幕。这在此处被提及并解决
手动修复:
Open Spotlight
→ System Preferences
→ Security & Privacy
→ Screen Recording
→ Click lock symbol
→add app that runs the python command (e.g. VSCode, iTerm)
(使用 Big Sur 11.4、Python 3.9.5 测试)