【问题标题】:PIL ImagineGrab only returns background image on Mac not a screen grab like I thoughtPIL ImagineGrab 只返回 Mac 上的背景图像,而不是我想的屏幕抓取
【发布时间】:2021-07-12 08:42:26
【问题描述】:

我正在使用 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()

【问题讨论】:

  • 下次选择代码并使用按钮{}Ctrl+K 正确格式化相关问题
  • 也许可以找到ImageGrab 的文档,看看它是否没有一些选项可以更改它。据我所知,它使用外部程序来抓取屏幕,如果这些外部程序可以抓取全屏,那么您可以尝试更改源代码以在 Python 中抓取它。
  • 顺便说一句,ImageGrabPIL/pillow 的一部分,而不是OpenCV,您的所有问题都与OpenCV 无关。或许你可以用两行测试问题image = ImageGrab.grab()image.show()
  • PIL ImageGrab 的文档显示了一些选项 - 选项 xdisplay="" 似乎很有趣。但是我没有用Mac来测试。

标签: python macos python-imaging-library


【解决方案1】:

我的解决方案是允许正在执行的应用程序(VSCode、iTerm)抓取屏幕。这被提到并解决了here

手动修复:

Open SpotlightSystem PreferencesSecurity & PrivacyScreen RecordingClick lock symboladd app that runs the python command (e.g. VSCode, iTerm)

(使用 Big Sur 11.4、Python 3.9.5 测试)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-02
    • 1970-01-01
    相关资源
    最近更新 更多