Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用emguCV(OpenCV)在firewire摄像机的2个不同程序中捕获视频?_C#_Emgucv_Firewire - Fatal编程技术网

C# 使用emguCV(OpenCV)在firewire摄像机的2个不同程序中捕获视频?

C# 使用emguCV(OpenCV)在firewire摄像机的2个不同程序中捕获视频?,c#,emgucv,firewire,C#,Emgucv,Firewire,我正在寻找一种使用OpenCV(或者特别是C#中的emguCV)在两个不同程序上同时从同一火线捕获视频的方法。这里的一些帖子说这是不可能的,因为源驱动程序一次只能锁定在一个应用程序中 我在这里发现一些建议使用,但它似乎只适用于网络摄像头。我也不喜欢SplitCam上的广告(但我不能抱怨,因为这是一个免费软件) SplitCam似乎正在使用源信号,并创建一个虚拟驱动程序供其他程序使用。是否有一种方法可以使用OpenCV完成与SplitCam相同的操作?OpenCV可以访问firewire摄像头,我

我正在寻找一种使用OpenCV(或者特别是C#中的emguCV)在两个不同程序上同时从同一火线捕获视频的方法。这里的一些帖子说这是不可能的,因为源驱动程序一次只能锁定在一个应用程序中

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


SplitCam似乎正在使用源信号,并创建一个虚拟驱动程序供其他程序使用。是否有一种方法可以使用OpenCV完成与SplitCam相同的操作?OpenCV可以访问firewire摄像头,我可以在emguCV中使用它,只运行一个程序。

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

1) 实现DirectShow虚拟视频捕获源过滤器。这个项目已经被记录在案了。由于我对DirectShow了解不多,所以这种方法需要一些学习曲线

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

我最终选择了解决方案2,因为它很容易快速实现。我使用该组件创建一个虚拟设备,用于从主firewire摄像机设备获取视频。之后,我的程序使用emguCV抓取帧,可以从虚拟设备抓取。虚拟设备可以由多个源使用,到目前为止,我有3个程序实例从虚拟设备抓取,并且我没有看到任何帧速率延迟(假定此firewire摄像头最多只运行15FPS)。这种解决方案的缺点是,我必须支付许可证的费用才能去除视频上的水印。我会更新这个当我发现多少,因为他们没有张贴SDK的价格在网站上。如果它真的很昂贵,我将不得不使用第一个解决方案并学习如何实现DirectShow过滤器

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