从OpenCV中的桌面获取输入流

问题描述 投票:7回答:1

我使用的是Python 3.5.1和OpenCV 3.0.0。

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

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

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

import os
os.system('screencapture test.jpg')

然后使用cv2.imread打开test.jpg。这是一个非常缓慢的方法,在网上搜索我发现这个问题Screen Capture with OpenCV and Python-2.7做同样的事情,但更有效率。但事实仍然是,它正在捕获单个屏幕截图并逐个处理它们而不是真正的视频流。我也发现这个How to capture the desktop in OpenCV (ie. turn a bitmap into a Mat)?,我认为它接近于我正在尝试但是在C ++中,如果有人可以帮助我将其转换为Python,我将非常感激。

最重要的是该程序将执行像MarI/O这样的事情,所以速度是一个问题,任何帮助是值得赞赏的,对我来说很容易,我(相对)是OpenCV的新手。

谢谢。

python macos opencv neural-network python-3.4
1个回答
0
投票

如果有人想要解决方案,只需更新此问题。

可以使用模块pyautogui实现截屏

import pyautogui
import matplotlib.pyplot as plt

image = pyautogui.screenshot()
plt.imshow(image)

如果要将其作为流读取,

while(True):
    image = pyautogui.screenshot()
    #further processing
    if finished:
        break

根据文件,

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

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

© www.soinside.com 2019 - 2024. All rights reserved.