我有一个采集卡,用它接usb的摄像头可以吗?怎样接?

2024-11-19 07:21:59
推荐回答(5个)
回答(1):

建议你用DirectShow
它可以帮你从视频采集设备中取得数据,并通过Sample Grabber过滤器进行抓图

DirectShow流媒体数据的采集及图片的捕获

用DirectShow来使用摄像头,一般要求摄像头的驱动是WDM格式的,当然,一些比较老的驱动格式DirectShow也可支持。在DirectShow中,有一个Sample Grabber过滤器,它是一个可以被插入流的过滤器,它有自己的缓冲,存放采样。我们就可以用它来从一个视频文件中简单的扑获一桢。DirectShow通过图形过滤管理器(Filter Graph Manager)来与上层应用程序和下层的驱动进行联系。DirectShow通过捕获过滤器(Capture Filter)来支持对摄像头的捕获,一个捕获过滤器有多个插口(pin),其中的预览(preview)插口可用来进行显示祯图象。

1、创建图形过滤管理器Filter Graph

如上面原理所述,首先要创建Filter Graph:

CComPtr< IGraphBuilder > m_pGraph;
hr=m_pGraph.CoCreateInstance( CLSID_FilterGraph );

2、连接设备

还要创建系统枚举器组件对象:

CComPtr<ICreateDevEnum>pCreateDevEnum;pCreateDevEnum.CoCreateInstance( CLSID_SystemDeviceEnum );

然后使用接口方法CreateClassEnumerator ()为指定的Filter注册类型目录创建一个枚举器,并获得IenumMoniker接口:

CComPtr< IEnumMoniker > pEm;
pCreateDevEnum->CreateClassEnumerator(CLSID_VideoInputDeviceCategory, &pEm, 0 );

接着在调用BindToObject()以后,可以将设备标识生成一个DirectShow Filter,将其加到Filter Graph中就可以参与工作了。

CComPtr< IMoniker > pM;
CComPtr< IPropertyBag > pBag;
hr=pM->BindToStorage(0,0,ID_IPropertyBag, (void**) &pBag );

3、创建Sample Grabber过滤器

CComPtr< ISampleGrabber > m_pGrabber
hr=m_pGrabber.CoCreateInstance( CLSID_SampleGrabber );

当创建好SampleGrabber以后,在Sample Grabber 过滤器连接到别的过滤器之前你必须配置它。然后查询IsampleGrabber接口,还要设置流媒体类型:

m_pGrabber->SetMediaType();

可以仅仅指定主媒体类型;或者主类型加子类型;或者主类型,子类型和类型格式。然后就把它加载到FilterGraph中去:

m_pGraph->AddFilter(pGrabBase, "Grabber " );

4、查找Filter Graph 的Pin并完成后续连接。

接下来就可以通过调用IGraphBuilder 的FindPin()接口来查找过滤管理器中的Pin接口,并通过ICaptureGraphBuilder2 中的接口RenderStream()来完成后续的连接。

hr=pCGB2->FindPin(pCap,PINDIR_OUTPUT,&PIN_CATEGORY_VIDEOPORT, NULL,FALSE,0,&pVPPin);
hr=pCGB2->RenderStream(&PIN_CATEGORY_CAPTURE,&MEDIATYPE_Video, pCap,pGrabBase,pRenderer);

5、获取流媒体类型并运行

通过GetConnectedMediaType()获取连接流媒体的类型以后,我们可以通过IsampleGrabberCB类的接口BufferCB()来把视频的数据拷贝到自定义的缓冲区中,然后通过在缓冲区的拷贝进行视频到图象数据的拷贝。最后运行:

CComQIPtr<IMediaControl,&IID_IMediaControl > pControl = m_pGraph;
hr = pControl->Run( );

具体的DirectShow是怎么实现的,你可以看DirectX9下面的SDK帮助,而且有相关的例子,可以帮你搞定:)

回答(2):

不行的。接口不对

回答(3):

不知道你的采集卡是什么样的,过去的采集卡一般是采集模拟信号的,也就是起到一个模--数转换的功能,也有的采集卡具有编码、压缩的功能,把数字信号再以不同的编码方式保存下来。而现在的USB摄像头提供的是已经转换了的数字信号,就不能(不必)再用采集卡了。

回答(4):

现在电脑算得很快,不用独立的采集卡,usb的摄像头分辨率低,就算是130w顶级的摄像头也可以直接存到电脑上

回答(5):

看到2个摄像头的画面,具备监控常规功能,如自动定时录像,回放.