python  OpenCV怎么使用背景分离方法

理论

背景分离(bs)是一种通过使用静态相机来生成前景掩码(包含属于场景中的移动对象像素的二进制图像)的常用技术

顾名思义,BS计算前景掩码,在当前帧与背景模型之间执行减法运算,其中包含场景的静态部分,考虑到所观察场景的特征,可以将其视为背景的所有内容。

背景建模包括两个主要步骤:

1.背景初始化

2.背景更新 第一步,计算背景的初始模型,在第二步中,更新模型以适应场景中可能的变化

立即学习“Python免费学习笔记(深入)”;

实现

让用户选择处理视频文件或图像序列。在此示例中,将使用cv2.BackgroundSubtractorMOG2 生成前景掩码。

from __future__ import print_functionimport cv2import argparseparser = argparse.ArgumentParser(            description='This program shows how to use background subtraction methods provided by OpenCV. You can process both videos and images.')parser.add_argument('--input', type=str, help='Path to a video or a sequence of image.', default='vtest.avi')parser.add_argument('--algo', type=str, help='Background subtraction method (KNN, MOG2).', default='MOG2')args = parser.parse_args()## [create]# create Background Subtractor objectsif args.algo == 'MOG2':    backSub = cv2.createBackgroundSubtractorMOG2()else:    backSub = cv2.createBackgroundSubtractorKNN()## [create]## [capture]capture = cv2.VideoCapture(args.input)if not capture.isOpened():    print('Unable to open: ' + args.input)    exit(0)## [capture]while True:    ret, frame = capture.read()    if frame is None:        break    ## [apply]    # update the background model    fgMask = backSub.apply(frame)    ## [apply]    ## [display_frame_number]    # get the frame number and write it on the current frame    cv2.rectangle(frame, (10, 2), (100,20), (255,255,255), -1)    cv2.putText(frame, str(capture.get(cv2.CAP_PROP_POS_FRAMES)), (15, 15),               cv2.FONT_HERSHEY_SIMPLEX, 0.5 , (0,0,0))    ## [display_frame_number]    ## [show]    # show the current frame and the fg masks    cv2.imshow('Frame', frame)    cv2.imshow('FG Mask', fgMask)    ## [show]    keyboard = cv2.waitKey(30)    if keyboard == 'q' or keyboard == 27:        break

登录后复制

代码分析

分析上面代码的主要部分:

cv2.BackgroundSubtractor对象将用于生成前景掩码。在此示例中,使用了默认参数,但是也可以在create函数中声明特定的参数。

# create Background Subtractor objects  KNN or MOG2if args.algo == 'MOG2':    backSub = cv2.createBackgroundSubtractorMOG2()else:    backSub = cv2.createBackgroundSubtractorKNN()

登录后复制

cv2.VideoCapture对象用于读取输入视频或输入图像序列

capture = cv2.VideoCapture(args.input)if not capture.isOpened:    print('Unable to open: ' + args.input)    exit(0)

登录后复制

每帧都用于计算前景掩码和更新背景。如果要更改用于更新背景模型的学习率,可以通过将参数传递给apply方法来设置特定的学习率

# update the background model    fgMask = backSub.apply(frame)

登录后复制

当前帧编号可以从cv2.Videocapture对象中提取,并在当前帧的左上角冲压。使用白色矩形来突出显示黑色框架号

 # get the frame number and write it on the current frame    cv2.rectangle(frame, (10, 2), (100,20), (255,255,255), -1)    cv2.putText(frame, str(capture.get(cv2.CAP_PROP_POS_FRAMES)), (15, 15),               cv2.FONT_HERSHEY_SIMPLEX, 0.5 , (0,0,0))

登录后复制

显示当前的输入帧和结果

# show the current frame and the fg masks    cv2.imshow('Frame', frame)    cv2.imshow('FG Mask', fgMask)

登录后复制

以上就是python  OpenCV怎么使用背景分离方法的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2235341.html

(0)
上一篇 2025年2月26日 17:59:58
下一篇 2025年2月22日 19:51:42

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • Python Unittest ddt数据驱动如何实现

    1、数据驱动介绍: @ddt.ddt(类装饰器,申明当前类使用ddt框架) @ddt.data(函数装饰器,用于给测试用例传递数据),支持传python所有数据类型:数字(int,long,float,compix),字符串,列表1ist,…

    编程技术 2025年2月26日
    200
  • Python如何实现一个位图索引

    代码如下: class Bitmap(object):def __init__(self, max):self.size = self.calcElemIndex(max, True)self.array = [0 for i in ran…

    编程技术 2025年2月26日
    200
  • Python Casting怎么使用

    指定变量类型 有时您可能需要为变量指定类型,这可以通过 casting 来完成,python 是一门面向对象的语言,因此它使用类来定义数据类型,包括其原始类型。 因此,使用构造函数完成在 python 中的转换: int() –…

    2025年2月26日
    200
  • 怎么用python代码实现图片去摩尔纹

    1、前言 当感光元件像素的空间频率与影像中条纹的空间频率接近时,可能产生一种新的波浪形的干扰图案,即所谓的摩尔纹。传感器的网格状纹理构成了一个这样的图案。若图案中的细条状结构与传感器的结构呈小角度交叉,则会在图像中产生明显的干扰效应。这种现…

    2025年2月26日
    200
  • Python Excel数据处理之xlrd/xlwt/xlutils模块怎么使用

    常规的excel数据处理中,就是对excel数据文件的读/写/文件对象操作。 通过对应的python非标准库xlrd/xlwt/xlutils,来实现具体的数据处理业务逻辑。 在复杂的Excel业务数据处理中,三兄弟扮演的角色缺一不可。今天…

    2025年2月26日
    200
  • Python怎么使用ClickHouse

    clickhouse是近年来备受关注的开源列式数据库(dbms),主要用于数据联机分析(olap)领域,于2016年开源。目前国内社区火热,各个大厂纷纷跟进大规模使用。 今日头条,内部用ClickHouse来做用户行为分析,内部一共几千个C…

    2025年2月26日 编程技术
    200
  • Python递归下降Parser怎么实现

    1. 算术运算表达式求值 要解析这类文本,需要另外一种特定的语法规则。我们这里介绍可以表示上下文无关文法(context free grammer)的语法规则巴科斯范式(bnf)和扩展巴科斯范式(ebnf)。从小到一个算术运算表达式,到大到…

    2025年2月26日
    200
  • python查找与排序算法实例代码分析

    查找 二分查找 二分搜索是一种在有序数组中查找某一特定元素的搜索算法。搜索过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜索过程结束;如果某一特定元素大于或者小于中间元素,则在数组大于或小于中间元素的那一半中查找,而且跟开始一…

    2025年2月26日 编程技术
    200
  • Python自动化测试利器selenium怎么使用

    1 自动化测试 自动化测试指软件测试的自动化,在预设状态下运行应用程序或者系统,预设条件包括正常和异常,最后评估运行结果。将人为驱动的测试行为转化为机器执行的过程。 自动化测试包括UI自动化,接口自动化,单元测试自动化。按照这个金字塔模型来…

    2025年2月26日
    200
  • 怎么使用Python开发自定义Web框架

    开发自定义Web框架 接收web服务器的动态资源请求,给web服务器提供处理动态资源请求的服务。根据请求资源路径的后缀名进行判断: 如果请求资源路径的后缀名是.html则是动态资源请求, 让web框架程序进行处理。 否则是静态资源请求,让w…

    2025年2月26日 编程技术
    200

发表回复

登录后才能评论