从FireWire获取视频流

时间:2011-10-22 12:16:24

标签: c++ opencv directshow firewire

我正在尝试通过FireWire将视频从相机(Sony HVR-Z1E)传输到我的电脑。传入的图片/流将由一些期望CVMat格式的函数(来自openCV)进一步处理。 我的问题是现在我不知道如何抓住流。好的openCV 2.1为我提供了一些方法(cvCapturefromCam),但无论我给他什么参数,它总是从笔记本电脑的网络摄像头获取流而不是火线。我听说我需要在DirectShow API(使用Windows SDK)中切换主凸轮。但我实际上也不知道该怎么做。 那么有什么建议怎么做?

2 个答案:

答案 0 :(得分:0)

请参阅我的相关答案here。 OpenCV无法本机捕获Firewire相机的视频。您将需要使用CMU1394驱动程序或Sony驱动程序(如果有SDK可用)从该摄像头捕获视频,然后将其传递给OpenCV。

答案 1 :(得分:0)

多年前,我使用DirectShow制作了类似的东西。主要限制是事实,通过DShow获得的图像是标准的PAL分辨率。高清图像抓取是不可能的(它是索尼的第一个专业消费者高清摄像机之一,现在不记得确切的型号)。好事是 - 这个方法除了裸露的DirectShow之外不需要任何东西 - 没有额外的驱动程序等等。它非常快。

一般来说,方法是这样的:

  • 构建媒体渲染图(当然,您必须在该阶段枚举视频设备)
  • 在其中插入从ISampleGrabberCB继承的自定义类。

工作原理:

  • 它使用了来自ISampleGrabberCB的BufferCB()虚方法 - 您必须在继承的类中编写它。
  • 在提到的方法中,你必须将数据留在全局结构中,并从主线程中保留 - 处理它们。

我知道,这是一个有点模糊的描述,但我希望你能找到你的信息(谷歌搜索“ISampleGrabberCB”应该是一个很好的起点,应该有很多示例代码)。