我使用的是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的新手。
谢谢。
如果有人想要解决方案,只需更新此问题。
可以使用模块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速率,则可以使用此解决方案。