尝试使用 OpenCV 捕获显示输出以进行实时分析;我需要与操作系统交互以进行输入的帮助

Posted

技术标签:

【中文标题】尝试使用 OpenCV 捕获显示输出以进行实时分析;我需要与操作系统交互以进行输入的帮助【英文标题】:Trying to capture display output for real-time analysis with OpenCV; I need help with interfacing with the OS for input 【发布时间】:2011-05-02 21:29:19 【问题描述】:

我想将 OpenCV 计算机视觉库中的操作实时应用于从我的计算机显示器捕获的视频。 这种特殊情况的想法是在流行游戏的游戏过程中检测有趣的特征,并为用户提供增强的体验;但我可以想到其他几种情况,人们也希望能够实时访问这些数据。 无论如何,对于开发阶段,使用预制视频可能是可以接受的,但对于最终的应用程序性能和响应能力显然是至关重要的。

到目前为止,我正在尝试在 Ubuntu 10.10 上执行此操作,并且更喜欢使用类似 UNIX 的系统,但任何选项都值得关注。 我的 C 技能非常有限,所以只要可以通过 Python 与 OpenCV 交谈,我就会尝试使用它。 请注意,我尝试不是从相机设备捕获,而是从显示输出的实时流中捕获;我不知道如何接受输入。据我所知,CaptureFromCAM 仅适用于相机设备,在我看来,最终结果对实时性能的要求使得存储在文件中并通过 CaptureFromFile 读取是一个糟糕的选择。

到目前为止,我发现的最有希望的路线似乎是使用带有 x11grab 选项的 ffmpeg 从 X11 显示器捕获; (例如命令 ffmpeg -f x11grab -sameq -r 25 -s wxga -i :0.0 out.mpg 将显示 0 的 1366x768 捕获到“out.mpg”)。 我想应该可以将 ffmpeg 的输出流视为 OpenCV 读取的文件(可能是通过使用 CaptureFromFile 函数),也许可以使用管道;但这一切都比我以前处理过的要高得多,我真的可以使用一些方向。 您认为这种方法可行吗?更重要的是,你能想到一个更好的吗?你会怎么做?

【问题讨论】:

【参考方案1】:

如果您正在寻找实时性能,我会放弃 x11grab 或任何其他命令行工具来截取屏幕截图。

编写您自己的屏幕抓取器,以便您可以将其直接发送到 OpenCV。如果您想知道如何在 X11 下执行此操作,可以查看 xwd source code。

【讨论】:

这是有道理的。就我必须学习如何应用它而言,这是一个艰难的建议,但我认为这是可行的。对参考很有帮助。谢谢!【参考方案2】:

我认为主要挑战是实时要求。我认为你必须为 OpenCv 创建一些软件,灵感来自 ffmpeg 中的视频抓取代码。但这肯定会涉及到 C 级编码。

我的建议是首先尝试通过使用 ffmpeg 捕获的视频来使您的视觉算法正确。

【讨论】:

感谢您的快速回复。我认为您关于继续进行的建议在保持我的热情方面非常合理,但在我知道我能够根据需要获取数据之前,我不愿意在分析上投入任何重大努力。 (另外,很高兴知道从哪种数据结构开始)

以上是关于尝试使用 OpenCV 捕获显示输出以进行实时分析;我需要与操作系统交互以进行输入的帮助的主要内容,如果未能解决你的问题,请参考以下文章

如何用iOS自带摄像头进行拍摄获取视频流以及OpenCV图像处理实时显示

以Windows形式捕获openCV视频[重复]

在android中使用opencv捕获视频帧

使用 OpenCV 和 AVFoundation 框架的 iPhone 实时图像处理?

为啥 Objective-C 不显示 OpenCV 捕获的视频的输出帧?

使用opencv线程捕获空白图像