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

问题描述 投票:0回答:2

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

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

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

opencv ffmpeg computer-vision real-time capture
2个回答
0
投票

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

编写您自己的屏幕抓取器,以便您可以将其直接发送到 OpenCV。如果你想知道如何在 X11 下做到这一点,你可以看一下 xwd 源代码


0
投票

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

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

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