如何确定对象是停止移动还是离开框架

时间:2017-04-26 15:42:06

标签: opencv emgucv

我阅读的每个教程,示例或博客都会显示各种方法来跟踪框架中的移动对象,只要它移动即可。这已经无处不在。

我一直想弄清楚的是如何 确定对象是停止移动还是实际离开了框架 。当使用背景分离时,当对象停止移动时,它将成为前景的一部分,因此“消失”。它再次移动时“重新出现”。据我所知,当一个物体离开框架时存在相同的行为,它只是“消失”。例如,以下代码片段演示了这一点:

**BackgroundSubtractorMOG2 _fgDetector = new BackgroundSubtractorMOG2();
CvBlobDetector _blobDetector = new CvBlobDetector();
CvTracks _tracker = new CvTracks();
CvBlobs _blobs = new CvBlobs();**

private int FindAndTrack()
{
    CvInvoke.GaussianBlur(_analyzeMat, _smoothedFrame, new System.Drawing.Size(3, 3), 1); 

    #region use the BG/FG detector to find the forground mask

    _fgDetector.Apply(_smoothedFrame, _foregroundMask);

    #endregion use the BG/FG detector to find the forground mask

    _blobDetector.Detect(_foregroundMask.ToImage<Gray, byte>(), _blobs);
    _blobs.FilterByArea(_minimumAreaValue, int.MaxValue);

    _tracker.Update(_blobs, 0.01 * _scaleValue, 1, 5);
    return _tracker.Count;
}

我不再确定背景分离可能就是答案。

什么会给出一个离开框架的物体的明确指示?

谢谢, 道格

1 个答案:

答案 0 :(得分:1)

将tracker.update作为if循环的条件,如果条件失败,您感兴趣的对象已离开框架。 如果你想检测对象是否已经移动,那么比较x&amp;具有先前x&amp;的对象边界框的y值y如果值相同而且对象已经停止移动,那么边界框的值是否已移动