【问题标题】:How do I get video frames from the camera on Windows 10 system into my C++ application?如何从 Windows 10 系统上的摄像头获取视频帧到我的 C++ 应用程序中?
【发布时间】:2020-08-09 12:35:38
【问题描述】:

我正在使用 Visual Studio 2019 编写 C++ 应用程序。我想试验实时视频的神经网络处理。为此,我需要原始 RGB 视频数据。我希望该解决方案可以接受实时摄像头视频或视频播放帧。

许多 google 搜索发现已弃用的函数,因此我正在寻找 Windows 10 标配的当前最佳框架。例如,我的 google 搜索中的第一项在已弃用的 MFPlay 中。

这看起来很有希望: https://docs.microsoft.com/en-us/windows/win32/multimedia/using-video-capture。但是,虽然 Microsoft 文档给出了许多函数的语法,但并没有很好地解释函数的用途。

  1. 例如,它经常谈论捕获窗口,但是捕获窗口是做什么用的?当我只想为我的命令行应用程序提供视频帧流时,为什么需要一个窗口?

  2. capSetCallbackOnFrame 看起来很有趣,但随后说“在流式视频捕获期间不使用此回调函数。”那么……这有什么意义呢?

我希望我的最终代码如下所示:

设置线程:

  1. 查找视频捕获设备
  2. 为 RGB 模式设置视频捕获
  3. 注册一个帧回调函数

回调线程:

  1. 缓冲帧

处理线程:

  1. 在保存的缓冲区上做我的事情而不阻塞回调线程

【问题讨论】:

  • 您可以使用几个库。 opencv 就是其中之一。那是我唯一用于图像捕捉的一个,它很容易设置和使用。但还有更专业的。其中许多库都是开源的,并提供跨平台兼容性。

标签: c++ visual-studio-2019 rgb video-capture


【解决方案1】:

正如评论中提到的,OpenCv 是一个很棒的库,您可以将其用于这项工作。

您也可以使用openFrameWorks。它包含许多示例,以及用于实时视频处理(带或不带视频捕获)的模板代码,带有回调。

【讨论】:

  • 我希望有一种标准的 Windows 方式来执行此操作,但如果需要,我可以学习另一个框架。似乎没有多少人直接使用 Windows 来执行此操作,我可以与此相关,因为:1)微软贬低太多 2)他们的界面没有很好的文档记录(为了便于理解) 3)它似乎过于复杂(但也许只是因为它没有解释清楚)
  • 我没有足够的 Windows 原生 API 来帮助您。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-16
  • 1970-01-01
  • 2021-01-06
  • 2021-01-19
  • 1970-01-01
相关资源
最近更新 更多