如何用MOG算法从视频流中提取前景背景?

摘要:前言 今天来学习Samples中的第二个例子:使用 MOG(Mixture of Gaussians,高斯混合模型)算法来从视频流中分离前景和背景。 示例中的代码很短: public override void RunTest() { us
前言 今天来学习Samples中的第二个例子:使用 MOG(Mixture of Gaussians,高斯混合模型)算法来从视频流中分离前景和背景。 示例中的代码很短: public override void RunTest() { using var capture = new VideoCapture(MoviePath.Bach); using var mog = BackgroundSubtractorMOG.Create(); using var windowSrc = new Window("src"); using var windowDst = new Window("dst"); using var frame = new Mat(); using var fg = new Mat(); while (true) { capture.Read(frame); if (frame.Empty()) break; mog.Apply(frame, fg, 0.01); windowSrc.Image = frame; windowDst.Image = fg; Cv2.WaitKey(50); } } 先从示例代码开始学习,然后再使用WPF做一个界面。 效果: 就这张效果图你可能不清楚在干嘛,但是一看动态的效果图你大概就懂分离前景和背景是什么意思了。 开始学习 using var capture = new VideoCapture(MoviePath.Bach); 创建了一个VideoCapture对象,这个是什么呢? VideoCapture 是OpenCVSharp中用于视频捕获和读取的核心类,它提供了从多种视频源(包括摄像头、视频文件、网络流等)获取图像帧的统一接口。该类是计算机视觉应用中视频处理的基础组件,支持实时视频流处理和离线视频文件分析。 using var mog = BackgroundSubtractorMOG.Create(); BackgroundSubtractorMOG 是 OpenCV 中的一个背景减法算法,用于: 从视频流中分离前景和背景 检测运动物体 基于高斯混合模型(Mixture of Gaussians)进行背景建模 mog.Apply(frame, fg, 0.01); // 对每一帧应用背景减法 其中: frame 是输入的视频帧 fg 是输出的前景掩码 0.01 是学习率参数 BackgroundSubtractorMOG又是什么呢? BackgroundSubtractorMOG 是 OpenCvSharp 中实现基于高斯混合模型(Gaussian Mixture-based)的背景/前景分割算法的类。该类继承自 BackgroundSubtractor 抽象类,用于从视频序列中分离前景和背景对象。 高斯混合模型是一种无监督的聚类算法,它假设所有数据点都是由若干个不同的、符合高斯分布(正态分布)的模型“混合”生成的。它的目标就是找出这些高斯分布的最佳参数。刚入门学习,先当一名合格的掉包侠,知道这些算法在哪些场景下可以用到就行了,基本上都已经封装好了。
阅读全文