我正试图通过火线从相机(索尼HVR-Z1E)流式传输视频到我的计算机。传入的图片/流将由一些期望CVMat格式的函数进一步处理(来自openCV)。现在我的问题是我不知道怎么抓住小溪。好的,openCV 2.1为我提供了一些方法(cvcapturefromam),但无论我给他哪个参数,它总是从笔记本电脑的网络摄像头而不是从火线获取流。我听说我需要在DirectShow API(与Windows SDK)中切换主摄像头。但我也不知道怎么做。有什么建议吗?
请参阅我的相关答案。OpenCV无法从火线摄像机本地捕获视频。您将需要使用CMU1394驱动程序,或索尼驱动程序(如果SDK可用于它)从该相机捕获视频,然后将其传递给OpenCV。
几年前,我用DirectShow做了类似的东西。主要的限制是,通过DShow获取的图像是标准的PAL分辨率。高清图像抓取是不可能的(它是索尼第一批专业消费级高清摄像机之一,现在不记得确切的型号了)。好的方面是——这个方法除了DirectShow之外不需要任何东西——不需要额外的驱动程序等等。而且速度非常快。
一般来说,方法是这样的:
- 构建媒体渲染图(当然,在这个阶段你必须枚举视频设备)
- 插入从ISampleGrabberCB继承的自定义类。
工作原理:
- 它使用了来自ISampleGrabberCB的BufferCB()虚拟方法-你必须在继承的类中编写。 在上述方法中,您必须将数据留在全局结构中,并从主线程中处理它们。
我知道,这是一个有点模糊的描述,但我希望你能找到你的信息(谷歌"ISampleGrabberCB"应该是一个很好的起点,应该有很多样例代码)。