首页 > 编程语言 >opencv-python 视频前后景分离

opencv-python 视频前后景分离

时间:2023-08-10 22:24:14浏览次数:34  
标签:视频 python gmg 分离 cv2 默认 fgmask opencv 背景

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

前后景分离分为两步:第一步,计算背景的初始模型;第二步,更新模型以适应场景中可能的变化。

opencv中视频前后景分离的方法通常由3个,都是第三方的包。

1 混合高斯模型为基础的前后景分离方法

createBackgroundSubtractorMOG([, history[, nmixtures[, backgroundRatio[, noiseSigma]]]]) -> retval

history:进行建模的时候需要多长时间的参考帧,默认200ms

nmixtures:高斯范围值,默认5

backgroundRatio:背景比例,莫默认0.7

noiseSigma:降噪,默认0,表示自动降噪

上述参数通常不需要修改。

2 MOG2方法

同MOG类似,但是对亮度产生的阴影有更好的识别,缺点是会产生很多细小噪声。

createBackgroundSubtractorMOG2([, history[, varThreshold[, detectShadows]]]) -> retval

history:默认500ms  

detectShadows:是否检测阴影,默认True。

3 GMG方法

静态背景图像估计和每个像素的贝叶斯分割,抗噪性更强。

createBackgroundSubtractorGMG([, initializationFrames[, decisionThreshold]]) -> retval

initializationFrames:初始化帧数,默认120帧

前后景分离的实例视频是经典的 vtest.avi,三种背景分离方法如下:

import cv2
import numpy as np

cap = cv2.VideoCapture('./vtest.avi')
fps = cap.get(cv2.CAP_PROP_FPS)
# print(fps)

# MOG算法
mog = cv2.bgsegm.createBackgroundSubtractorMOG()   #bgsegm是三方的一个包

#MOG2 与MOG类似,但是对亮度产生的阴影有更好的识别,缺点是会产生很多细小的噪点。
mog2 = cv2.createBackgroundSubtractorMOG2() 

#GMG去背景:静态背景图像估计,和每个像素的贝叶斯分割,抗噪性强。(实际上噪声还是比较多)
gmg = cv2.bgsegm.createBackgroundSubtractorGMG()

while True:
    ret,frame = cap.read()
    
    if ret == True:
        
        fgmask2 = mog2.apply(frame) #应用前后景分离算法
        fgmask = mog.apply(frame)
        fgmask_gmg = gmg.apply(frame)
        
        cv2.imshow('fgmask',fgmask)
        cv2.imshow('fgmask2',fgmask2)
        cv2.imshow('fgmask_gmg',fgmask_gmg)
        
        key = cv2.waitKey(10)
        if key == ord('q'):
            break
    else:   #视频播放完毕,退出循环
        break
cap.release()
cv2.destroyAllWindows()

 

 

 就个人感觉而言,MOG2效果最好,也可能是opencv版本和算法版本问题。

 

 

 

  

标签:视频,python,gmg,分离,cv2,默认,fgmask,opencv,背景
From: https://www.cnblogs.com/libai123456/p/17621735.html

相关文章

  • opencv-python 视频处理
    视频是由图片组成的,视频的每一帧就是一幅图片,一般是30帧,表示一秒钟显示30张图片。opencv中可以用 VideoCapture来捕获摄像头,用数字表示不同的设备,比如0,1。如果是视频文件,直接指定路径即可。VideoCapture类提供了初始化,打开视频文件或设备,视频帧捕获,视频文件或设备关闭,属性设......
  • python猜数字小游戏
    importrandomdefguess_number():  target_number=random.randint(1,100)  attempts=0  whileTrue:    guess=int(input("请输入一个1到100之间的整数:"))    attempts+=1    ifguess<target_number:      print("猜......
  • [oeasy]python0083_[趣味拓展]字体样式_正常_加亮_变暗_控制序列
    字体样式回忆上次内容上次了解了一个新的转义模式\033逃逸控制字符escesc退出标准输出流进行控制信息的设置可以清屏也可以设置光标输出的位置还能做什么呢?可以设置字符的颜色吗???......
  • [oeasy]python0083_[趣味拓展]字体样式_正常_加亮_变暗_控制序列
    字体样式回忆上次内容上次了解了一个新的转义模式\033逃逸控制字符esc esc让输出退出标准输出流进行控制信息的设置可以清屏也可以设置光标输出的位置  还能做什么呢?可以设置字符的颜色吗???......
  • Python基础day63Django操作session和中间件使用
    Django操作cookie#设置cookie#获取cookieset_cookie('key','value',max_age=5,expires=5)参数:●key,键●value=’’,值●max_age=None,超时时间cookie需要延续的时间(以秒为单位)如果参数是\None``,这个cookie会延续到浏览器关闭为止expires=None,超时时间(......
  • Python模块之paramiko的基本使用
    简介paramiko是一个基于SSHv2协议的纯Python(2.7,3.4+)库;提供了客户端和服务器的功能;可以实现SSH2远程安全连接,支持认证和密钥方式;一般用于执行远程命令、传输文件、中间SSH代理等。paramiko可以在Python代码中直接使用SSH协议对远程服务器进行操作,而不是调用ssh命令对远程服......
  • C#实现PS曲线调整,OpenCV实现
    曲线原理 对于一个RGB图像, 可以对R, G, B通道进行独立的曲线调整,即,对三个通道分别使用三条曲线(Curve)。还可以再增加一条曲线对三个通道进行整体调整。 因此,对一个图像,可以用四条曲线调整。最终的结果,是四条曲线调整后合并产生的结果。比如:对红色通道定义一条曲线如下......
  • 分享之python 协程
    线程和进程的操作是由程序触发系统接口,最后的执行者是系统;协程的操作则是程序员。协程存在的意义:对于多线程应用,CPU通过切片的方式来切换线程间的执行,线程切换时需要耗时(保存状态,下次继续)。协程,则只使用一个线程,在一个线程中规定某个代码块执行顺序。协程的适用场景:当程序中存在大......
  • 软件测试|什么是Python构造方法,构造方法如何使用?
    构造方法(Constructor)是面向对象编程中的重要概念,它在创建对象时用于初始化对象的实例变量。在Python中,构造方法是通过特殊的名称__init__()来定义的。本文将介绍Python构造方法的基本概念、语法和用法。什么是构造方法?在面向对象编程中,构造方法是一个特殊的方法,用于在创建对象时初......
  • opencv-python图像金字塔
    图像金字塔是图像中多尺度表达的一种,主要用于图像特征检测,图像分割等领域,是一种以多分辨率来解释图像的有效但概念简单的结构。简单来说,图像金字塔是同一图像不同分辨率的子图集合。一幅图像的金字塔是一系列以金字塔形状排列的分辨率逐渐降低,且来源于同一张原始图的图像集合。层......