使用DirectShow.Net以较低的分辨率从网络摄像头捕获图像,同时在较低的分辨率下进行预览

时间:2013-08-04 02:13:33

标签: .net c#-4.0 webcam qr-code directshow.net

我正在使用DirectShow.Net将网络摄像头流式传输到我的C#(4.0)应用程序以读取QR码。它每隔0.5秒拍摄一次快照,看它是否可以找到任何QR码并对其进行解码。这在我的开发计算机上运行得很好,无论我可以获得我的网络摄像头,但是当我在目标机器(松下CF-U1 Toughbook - 英特尔凌动处理器)上试用它时,当我进入更高的分辨率时它真的开始陷入困境在网络摄像头上比800x600。

我正在使用DirectShow.Net DxSnap示例(名称空间快照)中的Capture类。我正在传递一个Picturebox来绘制预览。我很确定这是在困扰系统的原因(猜测视频卡不能完成任务)。我需要绘制预览(因此用户可以看到他们正在尝试扫描的内容),但它不必与查找QR代码的图片具有相同的分辨率。由于此程序适用于屏幕分辨率较低的设备,因此预览框最大值为320 x 240(我会根据相机上选择的分辨率调整宽高比。)

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

  1. 从同一网络摄像头获取两个流的方法,一个在低分辨率下 用于预览,一个用于高分辨率用于捕获

  2. 等同于此的东西,可能会在它被写入图片框之前降低分辨率(再次使用来自DirectShow.Net项目的DxSnap样本中的Capture类)

  3. 一种保持图片框不被刷新的方法

  4. DirectShow.Net以外的东西用于此类事情(它必须适用于桌面空间中从Windows XP到Windows 8的所有内容)。

  5. 感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

  1. 您可以使用SmartTee或InfiniteTee拆分流,但我不确定如何在拆分后更改分辨率。
  2. 不知道该怎么做。
  3. 您可以使用SampleGrabber捕获图像并手动将它们放入图片框中。然后,您可以完全控制帧在图片框中的显示时间。
  4. 如果你想要XP及以上,你需要使用DirectShow。 MediaFoundation(现代替代品)只是Vista及以上。
  5. 我的应用程序目前以不同于用户看到的视频分辨率的分辨率捕获图像。我之所以这样做,是因为我使用的网络摄像头(Logitech C920)同时具有Capture引脚和Still引脚,它们具有不同的视频格式列表。我能够独立地获得每个引脚的分辨率集,并改变我需要的分辨率。我的应用程序只关注Still引脚的分辨率,所以我改变了它,而Capture引脚始终保持在640 x 480。我相信SmartTee应该做类似的事情,而不需要Still针,但我不是DirectShow大师,所以其他人需要填写这些信息。