以高分辨率从网络摄像头捕获图片,同时使用 DirectShow.Net 以较低分辨率预览

2024-01-01

我正在使用 DirectShow.Net 将网络摄像头流式传输到我的 C# (4.0) 应用程序以读取 QR 码。它每 0.5 秒拍摄一次快照,看看是否可以找到任何 QR 码并对其进行解码。这在我的开发计算机上在我可以使用网络摄像头的任何分辨率下都非常有效,但是当我在目标机器(Panasonic CF-U1 Toughbook - Intel Atom 处理器)上尝试它时,当我使用更高分辨率时,它真的开始陷入困境网络摄像头上的分辨率高于 800x600。

我正在使用 DirectShow.Net DxSnap 示例(命名空间快照)中的 Capture 类。我向它传递一个图片框来绘制预览。我很确定这就是导致系统陷入困境的原因(猜测显卡无法胜任这项任务)。我需要绘制预览(以便用户可以看到他们正在尝试扫描的内容),但它的分辨率不必与查找二维码时拍摄的图片相同。由于该程序是为低屏幕分辨率的设备制作的,因此预览框的最大尺寸为 320 x 240(我确实根据相机上选择的分辨率调整了宽高比)。

所以我想我正在寻找的是以下任何一个:

  1. 一种从同一个网络摄像头发出两个流的方法,其中一个为低分辨率 用于预览,高分辨率用于捕获

  2. 与此相同的东西,可能会在写入图片框之前降低分辨率(再次使用 DirectShow.Net 项目的 DxSnap 示例中的 Capture 类)

  3. 一种防止图片框刷新太多的方法

  4. 除 DirectShow.Net 之外的其他东西也可以用于此类事情(它必须与桌面空间中从 Windows XP 到 Windows 8 的所有内容兼容)。

感谢您的帮助。


  1. 您可以使用 SmartTee 或 InfiniteTee 拆分流,但我不确定拆分后如何更改分辨率。
  2. 不知道该怎么做。
  3. 您可以捕获图像并使用 SampleGrabber 手动将它们放入图片框中。然后,您可以完全控制框架何时显示在图片框中。
  4. 如果您需要 XP 及更高版本,则需要使用 DirectShow。 MediaFoundation(现代替代方案)仅适用于 Vista 及更高版本。

我的应用程序当前捕获图像的分辨率与用户看到的视频的分辨率不同。我这样做是因为我使用的网络摄像头 (Logitech C920) 有一个 Capture 引脚和一个 Still 引脚,它们具有不同的视频格式列表。我能够独立获取每个引脚的一组分辨率,并更改我需要的分辨率。我的应用程序只关心 Still 引脚的分辨率,因此我更改了该分辨率,而 Capture 引脚始终保持在 640 x 480。我相信 SmartTee 应该可以做类似的事情,而不需要 Still pin,但我不是 DirectShow 专家,所以其他人需要向您填写这些信息。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

以高分辨率从网络摄像头捕获图片,同时使用 DirectShow.Net 以较低分辨率预览 的相关文章

随机推荐