使用emguCV(OpenCV)从火线相机中捕获2个不同程序中的视频?

时间:2013-01-11 14:33:53

标签: c# emgucv firewire

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

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

SplitCam似乎正在使用源信号并为其他程序创建虚拟驱动程序。有没有办法像SplitCam那样使用OpenCV做同样的事情? OpenCV可以访问firewire相机,我在运行单个程序的emguCV中使用它没有任何问题。

1 个答案:

答案 0 :(得分:0)

经过一段时间的搜索,我发现了两种不同的解决方案。

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

2)使用第三方组件。我发现e2esoft中有一个像SplitCam一样,但它是一个可以在你自己的项目中使用的SDK。他们已经有了一个CSharp示例。我确实有一些问题(错误80040154)使用此示例提供的COM对象,因为它是一个32位COM对象,但我正在运行64位Windows 7.我找到了一个解决方法here使用注册表黑客。

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

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

enter image description here