【进阶OpenCV】 (7)--视频处理 - 之 - 背景建模及目标跟踪

news2024/10/11 8:17:59

文章目录

  • 一、背景建模
    • 1. 目的
    • 2. 方法
    • 3. 帧差法
    • 4. 光流估计
  • 二、代码步骤
    • 1. 读取视频
    • 2. 构建卷积核
    • 3. 背景建模
  • 总结

一、背景建模

指在计算机视觉中,从视频序列中提取出静态背景的一种技术。在视频中,背景通常被定义为相对稳定的部分,例如墙壁、地面或天空等。背景建模的目标是将动态的前景对象与静态的背景进行分离,以便进一步分析和处理。

1. 目的

通过背景建模,我们可以实现很多应用,例如运动检测、目标跟踪等等。

2. 方法

背景建模的方法:帧差法,其中又包括两种方法:

  1. 基于K近邻的背景/前景分割算法BackgroundSubtractorKNN
  2. 基于高斯混合的背景/前景分割算法BackgroundSubtractorMOG2

3. 帧差法

  • 原理

由于场景中的目标在运动,目标的影像在不同图像帧中的位置不同。该类算法对时间上连续的两帧图像进行差分运算,不同帧对应的像素点相减,判断灰度差的绝对值,当绝对值超过一定阈值时,即可判断为运动目标,从而实现目标的检测功能。

在这里插入图片描述

  • 优缺点

帧差法非常简单,但是会引入噪音和空洞(人物中间是黑色的)问题。

4. 光流估计

  • 原理

光流(Optical Flow)是指图像中一个像素在不同帧之间的运动向量。光流估计的目标是在连续的图像帧之间找到对应的像素,并计算它们之间的位移或速度。其基本原理基于亮度恒定假设,即认为在短时间内,一个像素的亮度值在运动过程中保持不变。根据这一假设,光流估计方法通过观察像素在图像序列中的位置变化来推测它们的运动。

  • 前提

(1)亮度恒定:同一点随着时间的变化,其亮度不会发生改变。

(2)小运动:随着时间的变化不会引起位置的剧烈变化,只有小运动情况下才能用前后帧之间单位位置变化引起的灰度变化去近似灰度对位置的偏导数。

(3)空间一致:一个场景上邻近的点投影到图像上也是邻近点,且邻近点速度一致。因为光流法基本方程约束只有一个,而要求x,y方向的速度,有两个未知变量。所以需要连立n多个方程求解。

二、代码步骤

1. 读取视频

"""-----帧差法-----"""
import cv2
# 经典的测试视频
cap = cv2.VideoCapture('test.avi')

2. 构建卷积核

主要用于后续的腐蚀、膨胀、开/闭运算等,对侦察后的图片进行处理。

  • 方法
构建卷积核:
getStructuringElement(shape,ksize,anchor=None)得到一个卷积核。主要用于后续的腐蚀、膨胀、开/闭运算等
参数:
-- shape:设定卷积核的形状,可选以下参数:
     1. MORPH_RECT(矩形卷积核)
     2. MORPH_CROSS(十字形卷积核)
     3. MORPH_ELLIPSE(椭圆形卷积核)
-- ksize:设定卷积核的大小
-- anchor:表示描点的位置,一般c = 1,表示描点位于中心
kernel = cv2.getStructuringElement(cv2.MORPH_CROSS,(3,3))

3. 背景建模

创建混合高斯模型,用于背景建模:

  • 步骤:对视频的每一帧图片进行帧差处理,然后对帧差后的图片进行噪声处理,接着找到视频中移动人物的轮廓,最后画出轮廓,定位移动目标。

  • 结果展示:随着步骤展示每步后的结果。

  1. 源图像:

在这里插入图片描述

  1. 帧差图:

在这里插入图片描述

  1. 去噪声:

在这里插入图片描述

  1. 目标跟踪:

在这里插入图片描述

  • 代码展示
# 创建混合高斯模型,用于背景建模
fgbg = cv2.createBackgroundSubtractorMOG2()
while (True):
    ret,frame = cap.read()
    cv2.imshow('frame',frame)
    fgmask = fgbg.apply(frame) # 视频处理
    cv2.imshow('fgmask',fgmask)
    fgmask_new = cv2.morphologyEx(fgmask,cv2.MORPH_OPEN,kernel) # 开运算去除噪声点,先腐蚀后膨胀
    cv2.imshow('fgmask1',fgmask_new)

    # 寻找视频中的轮廓
    _,contours,h = cv2.findContours(fgmask_new,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)
    for c in contours:
        # 计算各轮廓的周长
        perimeter = cv2.arcLength(c,True)
        if perimeter > 188:
            # 找到一个直矩形(不会旋转)
            x,y,w,h = cv2.boundingRect(c)
            # 画出这个矩形
            fgmask_new_rect = cv2.rectangle(frame,(x,y),(x + w,y + h),(0,255,0),2)
    cv2.imshow('fgmask_new_rect',fgmask_new_rect)
    k = cv2.waitKey(60)
    if k == 27:
        break

总结

本篇介绍了:

  1. 对视频进行背景建模,使用帧差法。
  2. 对视频中移动对象进行目标跟踪检测。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2195003.html

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

相关文章

vue2中 vue-count-to组件让数字从某个数字动态的显示到某个数字(后附vue3的用法)

1、首先安装 npm install vue-count-to2、使用 2.1、先导入组件 import countTo from ‘vue-count-to’2.2、注册组件 components: { countTo },2.3、使用组件 <countTo> <template><div class"home"><countTo class"count-to&qu…

【查找算法概念】与【线性表的相关查找算法】

1.知识回顾 2.查找算法相关问题汇总 2.1在哪里查找 查找表 2.2通过什么进行查找 关键字的对应 主关键字&#xff1a;比如我们可以通过一个学号来唯一确定一名学生 这里的学号就是一种主关键字。 次关键字&#xff1a;而通过一个名字李华&#xff0c;我们可能会确定不止一名…

selenium的webdriver常用方法和属性介绍(2)

selenium的webdriver介绍 从selenium导入webdriver模块&#xff0c;在pycharm中跳转webdriver模块的__init__.py文件&#xff0c;内容如图所示&#xff1a;从selenium包的子目录中导入了很多模块并做了重命名&#xff0c;用于支持如下 Chrome/Edge/Ie/Firefox/Safari浏览器。 使…

基于深度学习的多焦点图像融合系统【数据集+深度学习模型+源码+PyQt5界面】

深度学习多焦点聚焦图像融合 文章目录 研究背景代码下载链接一、效果演示1.1 界面设计1.2 图像融合演示11.3 图像融合演示21.4 图像融合演示3 二、技术原理2.1 引言2.2 融合策略2.3 深度特征的提取2.4 融合策略2.4.1 利用深度特征计算模糊度2.4.2 去噪与平滑2.4.3 图像融合 三、…

计算机网络——p2p

流媒体是指在网络上以流式传输技术实时播放的多媒体内容&#xff0c;如音频、视频等。以下是关于流媒体的详细介绍&#xff1a; 一、工作原理 数据分割与传输&#xff1a; 流媒体技术将多媒体文件分割成较小的数据包。这些数据包按照特定的顺序进行编号&#xff0c;然后通过网络…

Luminar激光雷达公司裁员重组的深度分析

在科技行业风起云涌的今天,每一家企业都面临着前所未有的挑战与机遇。当地时间9月23日,美国激光雷达领域的领军企业Luminar Technologies向美国证券交易委员会(SEC)提交了一份8-K报告,正式宣布了一项重大的业务重组计划,其核心内容是通过进一步裁员来优化成本结构,以期在…

【英语】3. 词源

文章目录 前言动词变名词解释e.g. 一、词根二、介词短语spect/spec: means see, look 合成词三、介词本身的意思总结参考文献 前言 进行英语前后缀的复习 动词变名词 解释 外国的表达方式&#xff1a;更多地偏向静态&#xff0c;因此更多地使用名词 e.g. (rather Chinglish…

【数据结构与算法】排序算法

3.7 排序算法 概述 比较排序算法 算法最好最坏平均空间稳定思想注意事项冒泡O(n)O( n 2 n^2 n2)O( n 2 n^2 n2)O(1)Y比较最好情况需要额外判断选择O( n 2 n^2 n2)O( n 2 n^2 n2)O( n 2 n^2 n2)O(1)N比较交换次数一般少于冒泡堆O( n l o g n nlogn nlogn)O( n l o g n nlogn …

【Linux】认识Linux内核中进程级别的文件结构体【files_struct】&文件IO模型初步演示

前言 大家好吖&#xff0c;欢迎来到 YY 滴 系列 &#xff0c;热烈欢迎&#xff01; 本章主要内容面向接触过C的老铁 主要内容含&#xff1a; 欢迎订阅 YY滴C专栏&#xff01;更多干货持续更新&#xff01;以下是传送门&#xff01; YY的《C》专栏YY的《C11》专栏YY的《Linux》…

高效医疗:Spring Boot医院管理解决方案

1系统概述 1.1 研究背景 如今互联网高速发展&#xff0c;网络遍布全球&#xff0c;通过互联网发布的消息能快而方便的传播到世界每个角落&#xff0c;并且互联网上能传播的信息也很广&#xff0c;比如文字、图片、声音、视频等。从而&#xff0c;这种种好处使得互联网成了信息传…

算法题总结(十一)——二叉树下

257、二叉树的所有路径 给你一个二叉树的根节点 root &#xff0c;按 任意顺序 &#xff0c;返回所有从根节点到叶子节点的路径。 叶子节点 是指没有子节点的节点。 示例 1&#xff1a; 输入&#xff1a;root [1,2,3,null,5] 输出&#xff1a;["1->2->5",&…

【设计模式】软件设计原则——依赖倒置合成复用

依赖倒置引出 依赖倒置 定义&#xff1a;高层模块不应该依赖低层模块&#xff0c;二者都应该依赖抽象&#xff1b;抽象不应该依赖细节&#xff0c;细节应该依赖抽象。面向接口编程而不是面向实现编程。 通过抽象使用抽象类、接口让各个类or模块之间独立不影响&#xff0c;实现…

Charles安卓抓包环境配置

下载安装Charles 官网搜索然后直接下载就可以了 抓HTTP的包 HTTP代理 在Proxy->Proxy Settings里配置HTTP代理 手机上配置代理 进入WIFI&#xff0c;找到连接的网络&#xff0c;打开高级选项&#xff0c;里面有一个代理选项&#xff0c;将其改为手动&#xff0c;然后…

<<机器学习实战>>12-14节笔记:机器学习模型可信度、逻辑回归模型及多分类问题处理

12机器学习模型可信度 是否检验模型的指标好就一定说明模型可用&#xff1f;不是&#xff0c;必须得保证训练的样本和整天基本满足同一分布。 统计学习和机器学习区别&#xff1a;统计学习是根据样本模拟总体规律进而去预测&#xff08;当然要比对样本和总体的统计量是否一致&…

Bloom Filter 布隆过滤器

目录 简介 Bloom Filter的基本原理 实现 使用 HashFunc越多&#xff0c;性能越好吗&#xff1f; 如何尽量避免误判&#xff1f; 应用 布隆过滤器优点 简介 Bloom Filter是一种空间效率极高的概率数据结构&#xff0c;它用于测试一个元素是否属于集合。Bloom Filter的优…

wc命令:统计文本行数、单词数、字节数

一、命令简介 ​wc​&#xff08;word count&#xff09;是一个在类 Unix 系统中常用的命令行工具&#xff0c;用于统计文本文件的 行数​、单词数 ​和 字节数​。 ​​ ‍ 二、命令参数 ​wc​ 命令的基本语法如下&#xff1a; wc [选项] 文件选项&#xff1a; ​-c​…

Spring Validation 参数校验框架

目录 一.Maven依赖 二.参数校验 常用注解 1.Body参数校验 2.Params参数校验 2.1.Query参数校验 2.2.Path参数校验 三.全局异常处理器捕获校验异常 四.分组校验 1.分组校验 2.案例 2.1.登录 2.2.注册 五.嵌套校验 六.集合校验 七.自定义校验 八.快速失败(Fail …

全球IP归属地查询-IP地址查询-IP城市查询-IP地址归属地-IP地址解析-IP位置查询-IP地址查询API接口-IP查询城市-IP解析城市

IP地址查询接口是指能够返回IP地址相关信息的网络接口&#xff0c;其返回的信息通常包括IP地址的归属地&#xff08;如国家、省份、城市等&#xff09;、运营商信息以及其他技术细节。以下是一些常见的IP地址查询接口及其特点&#xff1a; 一、国内IP地址查询接口 百度IP地址查…

Burp Suite为何能抓到HTTPS的明文流量,Wireshark可以吗,公司电脑的加密流量也是被监控了吗?

在前期博文《万字图文详解HTTPS协议通信过程&#xff0c;结合抓包实战解析带你一次看透HTTPS&#xff01;》中&#xff0c;我们知悉HTTPS通信内容是用会话密钥加密的&#xff0c;但不少细心的读者存在疑问&#xff1a;为何对于使用HTTPS协议的站点&#xff0c;在Burp Suite中拦…

5.人员管理模块(以及解决运行Bug)——帝可得管理系统

目录 前言一、页面修改表单展示修改 二、新增对话框修改三、修改对话框修改修改时展示创建时间 四、解决页面展示错误五 、 解决【java.lang.NullPointerException: null】 Bug 前言 提示&#xff1a;本篇完成人员管理模块的开发&#xff0c;具体需求、修改代码的路径和最终效…