【问题标题】:webcam time inaccuracy, setting exposure time网络摄像头时间不准确,设置曝光时间
【发布时间】:2010-11-30 21:02:08
【问题描述】:

我有一个复杂的问题,我已经解决了好几个星期。我的程序是一个教育软件,它使用网络摄像头来分析物理实验(例如振荡运动)。我经历了以下几点:

  • 如果处理器忙,时间 测量不准确 (ISampleGrabberCB.BufferCB(SampleTime))
  • 如果我不使用时间,就数数 样本:0、1、2...看起来 更好的。当我看的时候我意识到了这一点 在运动的曲线上。

我的主要目标是减少不准确性,我试图通过限制 FPS(这会导致处理器繁忙)来实现。

【问题讨论】:

    标签: c# multithreading graphics directx webcam


    【解决方案1】:

    来自 Time and Clocks in DirectShow 上的 MSDN 文章:

    任何支持 IReferenceClock 接口的对象都可以作为参考时钟。可以访问硬件计时器的过滤器可以提供时钟(例如音频渲染器),或者过滤器图形管理器可以创建使用系统时间的时钟。

    我从未尝试使用过滤器中的 IReferenceClock,但我怀疑它可能无法提供您需要的高分辨率时钟。

    这个SO post on high resolution timers 可能是你需要的。

    IAMStreamConfig.AvgTimePerFrame 仅供参考,尝试调整它不会有任何效果。它只是一个值,您可以从中计算视频流的平均帧速率。

    例如

    VIDEOINFOHEADER* pVih = (VIDEOINFOHEADER*)m_MediaTypes.VideoType.pbFormat;
    
    if( pVih )  
        int nFrameRate = (int)( (double) (10000000.0f / pVih->AvgTimePerFrame) );   
    

    【讨论】:

    • 感谢您的回复。我尝试了不同的高分辨率计时器,但这并不能解决我的问题。我需要样品的准确时间,如果我知道其他时刻的准确时间也无济于事。如果我实现 IReferenceClock,并将其构建到我的图表中,我需要什么? (我认为不是,出于同样的原因) IAMStreamConfig.AvgTimePerFrame:您可以更改 AvgTimePerFrame 的值,它适用于其他网络摄像头,但不适用于此。我必须针对 Intel Classmate PC 优化我的程序,所以我必须使用这个硬件。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-28
    • 2012-11-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多