我阅读的每个教程,示例或博客都会显示各种方法来跟踪框架中的移动对象,只要它移动即可。这已经无处不在。
我一直想弄清楚的是如何 确定对象是停止移动还是实际离开了框架 。当使用背景分离时,当对象停止移动时,它将成为前景的一部分,因此“消失”。它再次移动时“重新出现”。据我所知,当一个物体离开框架时存在相同的行为,它只是“消失”。例如,以下代码片段演示了这一点:
**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;
}
我不再确定背景分离可能就是答案。
什么会给出一个离开框架的物体的明确指示?
谢谢, 道格
答案 0 :(得分:1)
将tracker.update作为if循环的条件,如果条件失败,您感兴趣的对象已离开框架。 如果你想检测对象是否已经移动,那么比较x&amp;具有先前x&amp;的对象边界框的y值y如果值相同而且对象已经停止移动,那么边界框的值是否已移动