我想将 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 函数),也许可以使用管道;但这一切都比我以前处理过的要高得多,我真的可以使用一些方向。您认为这种方法可行吗?更重要的是,你能想到一个更好的吗?你会怎么做?