0

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

4

2 回答 2

0

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

于 2011-10-22T16:46:54.777 回答
0

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

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

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

它是如何工作的:

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

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

于 2011-10-23T11:05:55.953 回答