以高分辨率从网络摄像头捕获图片,同时使用 DirectShow.Net 以较低的分辨率进行预览
Posted
技术标签:
【中文标题】以高分辨率从网络摄像头捕获图片,同时使用 DirectShow.Net 以较低的分辨率进行预览【英文标题】:Capturing pictures from webcam at high resolution while previewing at a lower one using DirectShow.Net 【发布时间】:2013-08-05 00:52:51 【问题描述】:我正在使用 DirectShow.Net 将网络摄像头流式传输到我的 C# (4.0) 应用程序以读取 QR 码。它每 0.5 秒拍摄一次快照,以查看是否可以找到任何 QR 码并对其进行解码。这在我的开发计算机上以任何分辨率都可以很好地使用我的网络摄像头,但是当我在目标机器(Panasonic CF-U1 Toughbook - Intel Atom 处理器)上尝试它时,当我转到更高的分辨率时它真的开始陷入困境在网络摄像头上超过 800x600。
我正在使用 DirectShow.Net DxSnap 示例(命名空间快照)中的 Capture 类。我正在向它传递一个 Picturebox 来绘制预览。我很确定这是使系统陷入困境的原因(猜测视频卡无法胜任这项任务)。我需要绘制预览(以便用户可以看到他们正在尝试扫描的内容),但它不必与为查找 QR 码而拍摄的图片具有相同的分辨率。因为这个程序是为低屏幕分辨率的设备而设计的,所以预览框最大为 320 x 240(我确实根据相机上选择的分辨率调整了纵横比)。
所以我想我正在寻找的是以下任何一个:
一种让两个流来自同一个网络摄像头的方法,一个是低分辨率的 用于预览和高分辨率用于捕获
与此相同,可能会在将分辨率写入图片框之前降低分辨率(再次使用 DirectShow.Net 项目的 DxSnap 示例中的 Capture 类)
李>防止图片框刷新太多的方法
使用 DirectShow.Net 以外的东西来做这类事情(它必须与桌面空间中从 Windows XP 到 Windows 8 的所有东西一起使用)。
感谢您的帮助。
【问题讨论】:
你有想过这个吗? 【参考方案1】:-
您可以使用 SmartTee 或 InfiniteTee 拆分流,但我不确定拆分后如何更改分辨率。
不知道该怎么做。
您可以使用 SampleGrabber 捕获图像并手动将它们放入图片框中。然后,您可以完全控制帧在图片框中显示的时间。
如果您需要 XP 及更高版本,则需要使用 DirectShow。 MediaFoundation(现代替代方案)仅适用于 Vista 及更高版本。
我的应用程序当前正在以与用户看到的视频分辨率不同的分辨率捕获图像。我这样做是因为我使用的网络摄像头 (Logitech C920) 有一个 Capture pin 和一个 Still pin,它们有不同的视频格式列表。我能够独立获得每个引脚的一组分辨率,并更改我需要的分辨率。我的应用程序只关心 Still 引脚的分辨率,所以我更改了它,而 Capture 引脚始终保持在 640 x 480。我相信 SmartTee 应该做类似的事情而不需要 Still pin,但我不是 DirectShow 专家,所以其他人需要向你填写这些信息。
【讨论】:
以上是关于以高分辨率从网络摄像头捕获图片,同时使用 DirectShow.Net 以较低的分辨率进行预览的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 OpenCV 以您想要的分辨率从 DVR 读取图像?
sh 简单的gstreamer管道,用于将从网络摄像头捕获的视频录制到OGG,同时在屏幕上显示视频。
洞察使用 python 和 OpenCV 与 VideoCapture 进行多网络摄像头捕获