1

我正在寻找一种方法来使用 OpenCV(或特别是 C# 中的 emguCV)同时从 2 个不同程序上的同一火线上捕获视频。这里的一些帖子说它无法完成,因为源驱动程序一次会被锁定到一个应用程序中。

我在这里找到了一些建议使用SplitCam的答案,但它似乎只适用于网络摄像头。我也不喜欢 SplitCam 上的广告(但我不能抱怨,因为它是免费软件)。

SplitCam 似乎正在使用源信号并创建一个虚拟驱动程序供其他程序使用。有没有办法像使用 OpenCV 的 SplitCam 一样做同样的事情?OpenCV 可以访问火线摄像头,我在运行单个程序的 emguCV 中使用它没有问题。

4

1 回答 1

0

搜索了一段时间后,我找到了两种不同的解决方案。

1) 实现 DirectShow 虚拟视频捕获源过滤器。这个项目已经在CodeProject上得到了很好的记录。这种方法需要一些学习曲线,因为我对 DirectShow 了解不多。

2) 使用第 3 方组件。我从e2esoft找到了一个类似于 SplitCam 的工具,但它是一个可以在自己的项目中使用的 SDK。他们已经有一个 CSharp 示例。我在使用本示例提供的 COM 对象时确实遇到了一点问题(错误 80040154),因为它是一个 32 位 COM 对象,但我运行的是 64 位 Windows 7。我在这里找到了一个使用注册表黑客的工作.

我最终选择了解决方案#2,因为它很容易快速实施。我使用该组件创建了一个虚拟设备,该设备从主火线摄像头设备中获取视频。之后,我使用 emguCV 抓取帧的程序可以从虚拟设备中抓取。虚拟设备可以被多个来源使用,到目前为止,我有 3 个程序实例从虚拟设备中获取,并且我没有看到帧速率有任何滞后(假设这个火线相机最多只能运行 15FPS)。这个解决方案的缺点是我必须支付许可证才能去除视频上的水印。当我发现它是多少时,我会更新它,因为他们没有在网站上发布 SDK 的价格。如果真的很贵,我

2013 年 1 月 16 日编辑:VCam SDK 的价格为 699 美元。

在此处输入图像描述

于 2013-01-16T19:19:42.263 回答