高斯混合滤波(Gaussian Mixture Model, GMM)在图像处理中常常被用于背景建模和前景检测,特别是在视频监控、运动物体跟踪等应用中。GMM是一种概率模型,用于表示由多个高斯分布混合而成的数据分布。
以下是一个简单的示例,展示了如何使用OpenCV库中的BackgroundSubtractorMOG2
类(基于高斯混合模型)来实现背景建模和移动物体检测。这个类实际上是一个实现了GMM的背景减除算法。
- import cv2
- import numpy as np
-
- # 打开视频文件或摄像头
- cap = cv2.VideoCapture('path_to_video.mp4') # 替换为你的视频文件路径或摄像头ID(如0)
-
- # 创建背景减除器对象
- # 这里的参数可以根据需要进行调整,例如history用于设置背景模型更新的速度
- fgbg = cv2.createBackgroundSubtractorMOG2()
-
- while True:
- # 读取一帧图像
- ret, frame = cap.read()
-
- if not ret:
- break
-
- # 使用背景减除器处理帧图像
- fgmask = fgbg.apply(frame)
-
- # 显示原始帧和前景掩膜
- cv2.imshow('frame', frame)
- cv2.imshow('fgmask', fgmask)
-
- # 按'q'键退出循环
- if cv2.waitKey(1) & 0xFF == ord('q'):
- break
-
- # 释放资源和关闭窗口
- cap.release