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.mzph.cn/news/12141.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

服务器远程不上服务器怎么办?服务器无法远程的原因是什么?

服务器远程不上服务器怎么办?服务器无法远程的原因是什么? 接下来跟着笔者一起分析一下具体的原因有哪些以及相对应的解决方法 一、网络问题 1.本地网络问题 解决办法:检查本地网络是否正常,访问外网是否流畅,可以…

关于Java中的Lambda变量捕获

博主简介:想进大厂的打工人博主主页:xyk:所属专栏: JavaEE进阶 目录 一、Lambda表达式语法 二、Lambda中变量捕获 一、Lambda表达式语法 基本语法: (parameters) -> expression 或 (parameters) ->{ statements; } Lambda表达式由三部分组成&a…

使用Feign出现空指针异常

说明:本文记录一次偶然出现的空指针异常,在微服务架构中,一个服务在调用另一个服务时,出现了空指针异常。 业务描述:在做订单超时功能时,大家都知道,可以使用RabbitMQ延迟队列,下单…

数据结构—数组和广义表

4.2数组 数组:按一定格式排列起来的,具有相同类型的数据元素的集合。 **一维数组:**若线性表中的数据元素为非结果的简单元素,则称为一维数组。 **一维数组的逻辑结构:**线性结构,定长的线性表。 **声明…

TD1850多用表校准系统参考标准

参考标准 分类 标准名称 国家标准 GB/T 13978-2008 数字多用表 GB/T 15637-2012 数字多用表校准仪通用规范 计量法规 JJF 1075-2015 钳形电流表校准规范 JJF 1284-2011 交直流电表校验仪校准规范 JJF 1587-2016 数字多用表校准规范 JJG 124-2005 电流表、电压表、功率表及…

【多模态】18、ViLD | 通过对视觉和语言知识蒸馏来实现开集目标检测(ICLR2022)

文章目录 一、背景二、方法2.1 对新类别的定位 Localization2.2 使用 cropped regions 进行开放词汇检测2.3 ViLD 三、效果 论文:Open-vocabulary Object Detection via Vision and Language Knowledge Distillation 代码:https://github.com/tensorflo…

Angular函数中,哪些情况需要保存当前this作用域再使用?

在Angular函数中,有几种情况需要保存当前this作用域,以便在嵌套函数或回调函数中正确地使用它。这是因为JavaScript中的this关键字的值在不同的上下文中可能会发生变化。下面是几种需要注意的情况: 1、回调函数中的this: 当你在一…

三子棋(超详解+完整码源)

三子棋 前言一,游戏规则二,所需文件三,创建菜单四,游戏核心内容实现1.棋盘初始化1.棋盘展示3.玩家下棋4.电脑下棋5.游戏胜负判断6.game()函数内部具体实现 四,游戏运行实操 前言 C语言实现三子棋…

8.10 PowerBI系列之DAX函数专题-TopN中实现动态指标

需求 实现 建立一个辅助表供切片器选择 2 建立条件判断度量值top_measure swich(true(),selectedvalue(table[tope_type])"按数量top",sum(order_2[产品数量]),selectedvalue(table[tope_type])"按金额top",sum(order_2[订单金额]),selectedvalue(table…

本地部署中文LLaMA模型实战教程,民间羊驼模型

羊驼实战系列索引 博文1:本地部署中文LLaMA模型实战教程,民间羊驼模型(本博客) 博文2:本地训练中文LLaMA模型实战教程,民间羊驼模型 博文3:精调训练中文LLaMA模型实战教程,民间羊驼模型 简介 LLaMA大部分是英文语料训练的,讲中文能力很弱。如果我们想微调训练自己的…

aop实现方式及基本使用

aop实现方式 aspectj 编译器增强,直接修改源码可以不借助Spring实现 也没有用代理对象 (ajc编译器) aop 的原理并非代理一种, 编译器也能玩出花样(直接修改源码) 运行时需要在 VM options 里加入 -javaagent:D:/envir…

贪心算法总结及其leetcode题目N道

1 我为什么要写这个总结 1.1 字节笔试题 小明在玩一场通关游戏,初始血量为1,关卡有怪兽或者有血包(正数就是血包可回血数,负数说明是怪兽的伤害值),当捡到血包时会加血量,碰到怪兽时会掉血&am…

4种方法实现输入框按回车自动刷新页面

系列文章目录 文章目录 系列文章目录前言一、使用原生 JavaScript二、使用 Vue.js三、使用 jQuery四、 使用 React五、 注意事项总结前言 在 Web 开发中,有时我们希望用户在输入框中按下回车键时能够自动刷新页面,以便触发某些操作或更新数据。本文将介绍4种方法来实现这一功…

Matlab的SimuLink对FS32K144编程--内部数据存储Flash

​​​​​​​ ​​​​​​​ ​​​​​​​ ​​​​​​​ ​​​​​​​ 前言 Flah擦写是由寿命的,应当减免无效的擦写,如数据值不变不进行擦写 1、新建工程完成后,拖出Flash的存储控制初始化…

ROS 2 — 托管(生命周期)节点简介

一、说明 这篇文章是关于理解ROS 2中托管(生命周期)节点的概念。我们描述了概念性的想法以及我们为什么需要它。所以让我们开始吧! 二、托管式节点 — 什么和为什么? 为了理解托管式节点,让我们从一个简单的问题陈述开…

Python并发程序

大贤者福尔的在计算机方面的研究也取得了极大的成绩,他的研究主要集中在并行计算方面,通过锁机制保障程序的并行执行。为此,他设计了一个非常简单的原型系统,系统中程序最多不超过100条语句,分为以下几种类型: var = another_var or constant(变量赋值) var += another_…

串口通讯接口类型:TTL、RS232和RS485(电平标准)

串口通讯接口类型:TTL、RS232和RS485 在串口通信中,常用的接口类型包括TTL、RS-232和RS-485,TTL、RS-232、RS422、RS-485是指的电平标准(电信号)。 通信协议规定了数据传输的规则和格式,包括数据的起始位、停止位、数据位数、校…

内网穿透远程查看内网监控摄像头

内网穿透远程查看内网监控摄像头 在现代社会中,大家总是奔波于家和公司之间。大部分时间用于工作中,也就很难及时知晓家中的动态情况,对于家中有老人、小孩或宠物的(甚至对居住环境安全不放心的),这已然是…

Retrospectives on the Embodied AI Workshop(嵌入式人工智能研讨会回顾) 论文阅读

论文信息 题目:Retrospectives on the Embodied AI Workshop 作者:Matt Deitke, Dhruv Batra, Yonatan Bisk 来源:arXiv 论文地址:https://arxiv.org/pdf/2210.06849 Abstract 我们的分析重点关注 CVPR Embodied AI Workshop 上…

JiaYu说:如何做好IT类的技术面试?

IT类的技术面试 面试IT公司的小技巧IT技术面试常见的问题嵌入式技术面试嵌入式技术面试常见的问题嵌入式软件/硬件面试题 JiaYu归属嵌入式行业,所以这里只是以普通程序员的角度去分析技术面试的技巧 当然,也对嵌入式技术面试做了小总结,友友们…