2

我一直在开发一个 c++ 接口,以通过 Micrsoft Media Foundation 从所有类型的网络摄像头中捕获图像。我已经有一些代码可以连接多种类型的网络摄像头,并且能够捕捉不同分辨率和格式的图像。

我知道在 WinXP 下可以通过使用 Direct Show 库来更改网络摄像头的不同参数(如白平衡、曝光时间等)。不幸的是,Direct Show 库中可以轻松从网络摄像头捕获单帧的界面已从 Win7 下的 Direct Show 中删除。有人知道我如何使用 Microsoft Media Foundation 或我可以与 Microsoft Media Foundation 结合的任何其他库来访问这些参数吗?

4

4 回答 4

4

可以从 WMF 调用 DirectShow QueryInterface 方法。示例代码在Windows Media Foundation: Controlling Camera Properties中给出。这应该可以让您设置可用的相机参数,如焦点和白平衡等。

HRESULT CMFVideoCaptureDlg::SetupCamera(IMFMediaSource* pCameraSource) {
    CComQIPtr<IAMCameraControl> 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<IAMVideoProcAmp> spVideo(pCameraSource);
    if(spVideo)
        hr = spVideo->Set(VideoProcAmp_WhiteBalance, 0, VideoProcAmp_Flags_Auto);
    return hr;
}

事实证明,Media Foundation 没有为这些任务定义任何特定的接口。奇怪的是,当媒体源是摄像机时,它在其媒体源(由 IMFMediaSource 接口表示)上实现了由其前身 DirectShow 定义的接口

于 2016-04-18T09:59:57.493 回答
1

DirectShow在 Windows 7 中仍然很好(最容易检查的是使用GraphEditAMCap来自 Windows SDK)。然而,Media Foundation 在早期版本的 Windows 中缺乏必要的支持。

于 2012-04-17T13:09:11.747 回答
1

这篇文章有以下代码,它就像一个魅力!


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;
}
于 2017-03-04T04:52:58.473 回答
0

IAMCameraControl 和 IANVideoProcAmp 在 Windows 8 中仍然支持白平衡、平移、缩放。相机控制目前还不是 MFT 的一部分。我们必须使用 Direct Show 来做这些事情。

于 2013-02-13T19:30:09.337 回答