OpenCV 人体跟踪

5

你好,我是OpenCV的新手,正在尝试使用放置在固定位置的摄像头实现人体跟踪。经过一些研究,我发现了方向梯度直方图方法(Histogram of Oriented Gradients),但据我理解,它只能进行检测而非跟踪。因此,我想知道在OpenCV上实现人体检测和跟踪的最简单方法是什么?

P/S: 我找到了这个视频,正是我想要实现的。


你可以接受一个足够好的答案。(点击左侧的勾号接受答案) - samkhan13
2个回答

4
你还可以尝试使用HAAR级联进行人体检测。只需使用CascadeClassifier :: CascadeClassifier()加载级联,然后使用CascadeClassifier :: detectMultiScale()获取在给定图像中检测到对象(身体)的区域。调整传递给detectMultiScale()的参数以加快和提高检测精度。
你可以在这里找到一堆级联,包括用于身体检测的级联。
看看这些SO帖子:

感谢您提供详细的建议,但如果不麻烦的话,我有一个后续问题。您所建议的方法是否可以通过快速重新检测来“模拟”跟踪?因为我想在实时视频中为我正在跟踪的每个人放置一个唯一标识符(如上面的视频所示)。使用您的方法是否可能实现这一点?再次感谢。 - user2900552
使用HAAR或LBP级联,您只能检测与所需对象相似的每个摄像头帧内的区域。因此,在每个帧中都需要重新检测,从而可以进行跟踪。为所需对象的实例分配唯一ID需要使用主成分分析或线性判别分析或“特征检测和特征匹配”。寻找一本名为“Mastering OpenCV with Practical Computer Vision Projects”的书籍。它有您所需的C++配方。 - samkhan13
感谢您的友好回复。我一定会尝试您的建议,但现在我真的需要先加强学习OpenCV。再次感谢。 - user2900552
你提供的“一堆级联”的链接失效了。你能否更新一下新链接? - PeakGen

1
您可以使用HOG检测器或潜在SVM检测器与“人”模型一起获取人的边界框,然后跟踪该人。
通过以下方式可以跟踪人的质心: 测量新的质心位置。 测量它的速度。 使用当前帧位置和速度预测下一帧质心的位置。 然后检查质心的新测量是否接近预测。 如果是,则与上一帧中的同一人相同,如果不是,则是进入帧的新人。
也许您应该跟踪边界框而不是质心。 如果帧速率足够高,也许您只需绘制边界框并忘记跟踪即可。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接