混合高斯模型的背景建模,用来做目标检测,是真的挺稳的,是在监控视频这类背景相对稳定的场景里。OpenCV 里直接就有 cv::bgsegm::createBackgroundSubtractorMOG2() 这个接口,省事多了,调用完还能自动更新模型,响应也快。

像背景减除,重点就是区分“正常的背景”跟“突然冒出来的前景”。混合高斯模型就是用多个高斯分布来拟合每个像素的历史值,算是比较聪明的一种方式。你喂它几帧,它就开始学习背景了,后面再有新帧来,就能快分辨出变化了。

检测完了目标,如果你还想下目标的运动情况,比如轨迹、速度,那就得上光流了。Farneback 光流法是个不错的选择,OpenCV 的 calcOpticalFlowFarneback() 直接拿来用就行。像监控、交通这种场景,跑一遍基本就能看出人车的动线了。

文档里还提到一个 Matlab 实现无约束条件下普列姆(Prim)算法.docx,这东西本来是做最小生成树的,但在图像分割、轮廓提取上也能用上,尤其是你想搞个区域连接什么的。虽然不是 OpenCV 自带的,但原理可以借鉴。

,这套东西你要是搞视频、智能监控或者机器人视觉,挺实用的。GMM 配合光流,算是经典组合。如果你用 OpenCV,直接调用这些函数就好,不用重复造轮子。

对了,想深入点,可以看看这些链接:

如果你对视频前景分割比较头大,可以从 GMM 入门,先试试 OpenCV 自带的背景建模函数,感觉会清晰不少。