当前位置: 首页 > news >正文

OpenCV图像处理-视频分割静态背景-MOG/MOG2/GMG

视频分割背景

  • 1.概念介绍
  • 2. 函数介绍
    • MOG算法
    • MOG2算法
    • GMG算法
  • 原视频获取链接

1.概念介绍

视频背景扣除原理:视频是一组连续的帧(一幅幅图组成),帧与帧之间关系密切(GOP/group of picture),在GOP中,背景几乎是不变的,变的永远是前景。

  • 背景分离(BS)是一种通过使用静态相机来生成前景掩码(即包含属于场景中的移动对象像素的二进制图像)的常用技术
  • 顾名思义,BS计算前景掩码,在当前帧与背景模型之间执行减法运算,其中包含场景的静态部分,或者更一般而言,考虑到所观察场景的特征,可以将其视为背景的所有内容。

在这里插入图片描述

2. 函数介绍

MOG算法

cv2.createBackgroundSubtractorMOG(history, nmixtures, backgroundRatio, noiseSigma)
history:用于训练背景的帧数,默认为200帧
nmixtures:高斯范围值,默认为5;5*5的卷积核
backgroindRatio:背景比率,默认0.7
noiseSigma:默认0,自动降噪

代码示例:

import cv2
import numpy as np# 读取视频帧
cap = cv2.VideoCapture('./video/vtest.avi')
mog = cv2.bgsegm.createBackgroundSubtractorMOG()while True:ret, frame = cap.read()if ret == False:exit(1)fgmask = mog.apply(frame)cv2.imshow('text', fgmask)k = cv2.waitKey(10) & 0xffif k == ord('q'):breakcap.release()
cv2.destroyAllWindows()

在这里插入图片描述

MOG2算法

MOG2增加的是对阴影的识别,但是会产生更多的噪点。

cv2.createBackgroundSubtractorMOG2()
参数同MOG一样
detectShadows:是否检测阴影,默认为True

import cv2
import numpy as np# 读取视频帧
cap = cv2.VideoCapture('./video/vtest.avi')
# mog = cv2.bgsegm.createBackgroundSubtractorMOG()
mog = cv2.createBackgroundSubtractorMOG2()while True:ret, frame = cap.read()if ret == False:exit(1)fgmask = mog.apply(frame)#cv2.imshow('MOG', fgmask)cv2.imshow('MOG2', fgmask)k = cv2.waitKey(10) & 0xffif k == ord('q'):breakcap.release()
cv2.destroyAllWindows()

在这里插入图片描述

GMG算法

GMG算法的抗噪性更强,但是该算法有缓存初始帧,即缓存的帧数不显示。

算法:cv2.bgsegm.createBackgroundSubtractorGMG(initializationFrames=120)
initializationFrames:默认帧数为120,需要吃掉120帧,对之后的帧进行优化。

import cv2
import numpy as np# 读取视频帧
cap = cv2.VideoCapture('./video/vtest.avi')
# mog = cv2.bgsegm.createBackgroundSubtractorMOG()
# mog = cv2.createBackgroundSubtractorMOG2()
gmg = cv2.bgsegm.createBackgroundSubtractorGMG()while True:ret, frame = cap.read()if ret == False:exit(1)fgmask = gmg.apply(frame)#cv2.imshow('MOG', fgmask)cv2.imshow('MOG2', fgmask)k = cv2.waitKey(10) & 0xffif k == ord('q'):breakcap.release()
cv2.destroyAllWindows()

在这里插入图片描述

原视频获取链接

以上就是视频分割的基本使用方式,详情烦请参考相关论文和相关文档。

http://www.lryc.cn/news/100421.html

相关文章:

  • nginx 反向代理浅谈
  • 【概率预测】对风力发电进行短期概率预测的分析研究(Matlab代码实现)
  • 原型设计模式go实现尝试
  • 链表是否有环、环长度、环起点
  • 有效文档管理离不开这几个特点
  • 爬虫-requests-cookie登录古诗文网
  • Spring Boot实践三 --数据库
  • 分布式锁漫谈
  • mac 安装 php 与 hyperf 框架依赖的扩展并启动 gptlink 项目
  • ansible中run_once的详细介绍和使用说明
  • 短视频矩阵系统源码开发流程​
  • vite+vue3 css scss PC移动布局自适应
  • BLE配对和绑定
  • 无涯教程-jQuery - html( val )方法函数
  • 【单链表OJ题:删除链表中等于给定值 val 的所有节点】
  • vue element ui web端引入百度地图,并获取经纬度
  • 25.10 matlab里面的10中优化方法介绍—— 函数fmincon(matlab程序)
  • 赛效:如何将PDF文件免费转换成Word文档
  • java 8 的Stream API
  • TypeChat,用TypeScript快速接入AI大语言模型
  • Dcoker compose单机容器集群编排管理
  • P5635 【CSGRound1】天下第一(记忆化搜索)
  • 如何维护你的电脑:提升性能和延长使用寿命
  • Docker续集+Docker Compose
  • k8s deployment(k8s经典版)|PetaExpress
  • uni-app如何生成正式的APK
  • 低代码开发平台源码:可视化敏捷开发工具,拖拽式自定义表单界面
  • 利用读时建模等数据分析能力,实现网络安全态势感知的落地
  • 六、代理模式
  • Easy Glide