我一直在使用c ++界面通过Micrsoft Media Foundation从所有类型的网络摄像头捕获图像。我已经有了一些代码可以连接几种类型的网络摄像头,并能够捕获不同分辨率和格式的图像。
我知道在WinXP下,可以使用Direct Show库更改网络摄像头的不同参数(例如白平衡,曝光时间等)。不幸的是,直接显示库中的界面可以轻松地从网络摄像头捕获单帧,从Win7下的Direct Show中删除。有没有人知道如何使用Microsoft Media Foundation或我可以与Microsoft Media Foundation结合使用的任何其他库来访问这些参数?
答案 0 :(得分:2)
可以从WMF调用DirectShow QueryInterface方法。示例代码在Windows Media Foundation: Controlling Camera Properties给出。 这应该可以设置可用的相机参数,如聚焦和白平衡等。
db_subcat
事实证明Media Foundation没有定义任何特定的接口 为了这些任务。奇怪的是,它实现了定义的接口 它的前身,DirectShow,在其媒体源上(由代表 IMFMediaSource接口),当该媒体源是摄像机时
答案 1 :(得分:0)
DirectShow
在Windows 7中仍然很好(最容易检查的是使用来自Windows SDK的GraphEdit
和AMCap
。但媒体基金会在早期版本的Windows中缺乏必要的支持。
答案 2 :(得分:0)
IAMCameraControl和IANVideoProcAmp仍然支持白平衡,平移,放大Windows 8.相机控制到目前为止还不是MFT的一部分。我们必须使用Direct Show来做这些事情。
答案 3 :(得分:0)
This article具有以下代码,它就像一个魅力!
HRESULT CMFVideoCaptureDlg::SetupCamera(IMFMediaSource* pCameraSource) {
CComQIPtr spCameraControl(pCameraSource);
HRESULT hr = S_OK;
if(spCameraControl) {
long min, max, step, def, control;
hr = spCameraControl->GetRange(CameraControl_Exposure, &min, &max, &step, &def, &control);
if(SUCCEEDED(hr))
hr = spCameraControl->Set(CameraControl_Exposure, 1, CameraControl_Flags_Manual);
}
CComQIPtr spVideo(pCameraSource);
if(spVideo)
hr = spVideo->Set(VideoProcAmp_WhiteBalance, 0, VideoProcAmp_Flags_Auto);
return hr;
}