从OpenCV中的桌面获取输入流

Div*_*lra 7 python macos opencv neural-network python-3.4

我使用的是Python 3.5.1OpenCV 3.0.0.

我正在开发一个可以玩游戏的python程序,所以它需要在屏幕上"看到"正在发生的事情.怎么能实现这一目标?

import numpy as np
import cv2
cap = cv2.VideoCapture(0)
while(True):
    #work with frames here
Run Code Online (Sandbox Code Playgroud)

是否有一个int'a',cv2.VideoCapture(a)会将桌面屏幕视为视频输入?我尝试制作它并且我采用了一种相当笨拙的方法,我使用以下方法重复拍摄屏幕:

import os
os.system('screencapture test.jpg')
Run Code Online (Sandbox Code Playgroud)

然后使用cv2.imread打开test.jpg.这是一个非常缓慢的方法,在网上搜索我发现这个问题Screen Capture与OpenCV和Python-2.7做同样的事情,但更有效率.但事实仍然是它正在捕获单个屏幕截图并逐个处理它们而不是真正的视频流.我还发现了如何在OpenCV中捕获桌面(即将位图转换为Mat)?我认为它接近我正在尝试的但是在C++中,如果有人可以帮助我将其转换为Python,我将非常感激.

最重要的是该程序将执行类似MarI/O的操作,因此速度是一个问题,任何帮助都是值得欣赏的,对我来说很容易,我(相对)是OpenCV的新手.

谢谢.

dan*_*ang 1

只是对此问题的更新,以防有人想要解决方案。

使用模块可以实现截图pyautogui

import pyautogui
import matplotlib.pyplot as plt

image = pyautogui.screenshot()
plt.imshow(image)
Run Code Online (Sandbox Code Playgroud)

如果你想以流的形式读取它,

while(True):
    image = pyautogui.screenshot()
    #further processing
    if finished:
        break
Run Code Online (Sandbox Code Playgroud)

根据文档,

在 1920 x 1080 屏幕上,screenshot() 函数大约需要 100 毫秒

因此,如果您的应用程序不需要高 fps 速率,则可以使用此解决方案。