【python】OpenCV—Background Estimation(15)

news2024/10/5 17:26:50

在这里插入图片描述

文章目录

  • 中值滤波
  • 中值滤波得到图像背景
  • 移动侦测

学习来自 OpenCV基础(14)OpenCV在视频中的简单背景估计

中值滤波

中值滤波是一种非线性平滑技术,主要用于数字信号处理,特别是在图像处理中去除噪声。

一、定义与原理

定义:中值滤波是将每一像素点的灰度值设置为该点某邻域窗口内的所有像素点灰度值的中值。

原理:基于排序统计理论,通过把数字图像或数字序列中一点的值用该点的一个邻域中各点值的中值代替,让周围的像素值接近真实值,从而消除孤立的噪声点。

二、实现方法

在这里插入图片描述

选择一个窗口:通常选择一个(2n+1) x (2n+1)的窗口(如3x3或5x5),使窗口沿图像数据的行方向和列方向从左至右、从上至下滑动。

像素排序:对于窗口内的每个像素,按照其灰度值进行排序。

选择中值:从排序后的像素值中选择中间值作为输出灰度值。

三、特性与优点

抑制噪声:对脉冲噪声和椒盐噪声有良好的滤除作用。

保护边缘:在滤除噪声的同时,能够保护信号的边缘,使之不被模糊。

简单高效:算法比较简单,也易于用硬件实现。

四、适用场景

适用于去除椒盐噪声等孤立噪声。

在图像处理中,常用于保护边缘信息,是经典的平滑噪声的方法。

五、缺点

对于一些点、线、尖顶的细节多的数字图像,以及纹理特征明显、空间信息量丰富、分辨率高的遥感图像的处理效果较差,易造成图像细节模糊、纹理信息丢失等。

六、快速算法

中值滤波的快速算法一般采用以下三种方式:

直方图数据修正法

样本值二进制表示逻辑判断法

数字和模拟的选择网络法

七、总结

中值滤波是一种有效的非线性信号处理技术,特别适用于消除椒盐噪声等孤立噪声,并保护图像边缘。尽管在某些复杂图像中可能存在局限性,但其简单的算法和高效的性能使其在数字信号处理领域得到广泛应用。

中值滤波得到图像背景

原始视频

在这里插入图片描述

我们随机取出 25 帧,用中值滤波计算出其中值,滤掉移动的汽车(异常点),得到背景

import numpy as np
import cv2

# 打开视频
cap = cv2.VideoCapture('./video.mp4')

# 随机选择25帧
frameIds = cap.get(cv2.CAP_PROP_FRAME_COUNT) * np.random.uniform(size=25)

# 将选定的帧存储在数组中
frames = []
for fid in frameIds:
    cap.set(cv2.CAP_PROP_POS_FRAMES, fid)
    ret, frame = cap.read()
    frames.append(frame)

# 计算沿时间轴的中值
medianFrame = np.median(frames, axis=0).astype(dtype=np.uint8)

# 显示中值帧
cv2.imshow('frame', medianFrame)
cv2.waitKey(0)

看看效果

在这里插入图片描述
还是非常的 nice,过滤的很干净

移动侦测

前景减去背景,就可以得到移动的目标

import numpy as np
import cv2

# 读取视频
cap = cv2.VideoCapture('./video.mp4')

# 随之选择25帧
frameIds = cap.get(cv2.CAP_PROP_FRAME_COUNT) * np.random.uniform(size=25)

# 将选定的帧存储在数组中
frames = []
for fid in frameIds:
    cap.set(cv2.CAP_PROP_POS_FRAMES, fid)
    ret, frame = cap.read()
    frames.append(frame)

# 计算沿时间轴的中值
medianFrame = np.median(frames, axis=0).astype(dtype=np.uint8)

# 显示中值帧
cv2.imshow('frame', medianFrame)
cv2.waitKey(0)

# 重置帧号为0
cap.set(cv2.CAP_PROP_POS_FRAMES, 0)

# 转换背景到灰度
grayMedianFrame = cv2.cvtColor(medianFrame, cv2.COLOR_BGR2GRAY)

# 循环所有帧
ret = True
# index = 0

while ret:
  # 读取帧
  ret, frame = cap.read()
  
  # 将当前帧转换为灰度
  frame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
  
  # 计算当前帧和中间帧的绝对差值
  dframe = cv2.absdiff(frame, grayMedianFrame)
  
  # 二值化
  th, dframe = cv2.threshold(dframe, 30, 255, cv2.THRESH_BINARY)
  
  # 显示
  cv2.imshow('frame', dframe)
  # cv2.imwrite(f"./images1/{index}.jpg", dframe)
  # index+=1
  cv2.waitKey(20)

# 释放视频对象
cap.release()

# 关闭所有窗口
cv2.destroyAllWindows()

输入视频
在这里插入图片描述
输出移动前景
请添加图片描述

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

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

相关文章

如何使用Python在word文档中创建表格

如何使用Python在word文档中创建表格 介绍效果代码 介绍 本文将介绍如何使用Python库python-docx在Word文档中创建表格。 效果 插入表格前的word文档: 插入表格后的word文档: 代码 from docx import Document# 加载现有的Word文档 doc Document(…

利安科技上市首日股价大涨:2023营收净利润下滑,募资金额大幅缩水

《港湾商业观察》施子夫 6月7日,宁波利安科技股份有限公司(以下简称,利安科技)正式在深交所创业板挂牌上市,股票简称为利安科技,股票代码300784。 上市当天,利安科技股价大涨348.76%。 2022年…

高考志愿填报,如何识别兴趣和擅长?

一年一度的高考落下帷幕,是不是就意味着放松了?解放了? 高考志愿填报的重要性,依旧重要,考得好不如报的好。 考分高低固然是关键,而填报高考志愿,才是真正决定人生的一次选择,这一…

vue3 defineComponent + 渲染函数h + 全局注册​

defineComponent 是 Vue 3 中的一个函数,用于定义一个组件。它是 Vue 3 的组合式 API 的一部分,提供了一种更加灵活和组织化的方式来定义组件。在 Vue 2 中,我们通常使用一个对象来定义组件,而在 Vue 3 中,defineCompo…

Python深度学习基于Tensorflow(17)基于Transformer的图像处理实例VIT和Swin-T

文章目录 VIT 模型搭建Swin-T 模型搭建参考 这里使用 VIT 和 Swin-T 在数据集 cifar10 上进行训练 VIT 模型搭建 导入需要的外部库 import numpy as np import tensorflow as tf import matplotlib.pyplot as plt import matplotlib.gridspec as gridspec这里我们接着使用 ci…

idea开发工具清除Git凭证(含Git凭证管理策略)

前言 网上很多人出现这个问题,也有很多文章或博客来说明这个问题,但是几乎都没有说到点子上,全网几乎都说清除credential.helper配置或者清空windows凭证管理器,还有一些文章说清除IDEA缓存,其实都是不对的。 creden…

我在地球学Python基础第一篇:计算机组成原理基本知识和编程语言基础知识

业精于勤荒于嬉,行成于思毁于随。 今天开始系统记录学习Python 第一篇 计算机组成原理一、什么是计算机二、计算机是由什么组成的?2.1 硬件系统2.2 软件系统 三、计算机如何处理程序?四、编程语言 计算机组成原理 学习目标: 1、…

【docker实战】如何上传镜像到自己的私有仓库

上一篇文章讲了【docker实战】如何登陆到自己的私有仓库? – 经云的清净小站 (skycreator.top)。那么后面的工作就是如何上传镜像到自己的私有仓库了。 下面的操作是使用docker login命令成功之后的操作,没有login请先login。 我打算将本地的ubuntu:18…

攻防演练之-网络安全产品大巡礼二

书接上文,《网络安全攻防演练风云》专栏之攻防演练之-网络安全产品大巡礼一,这里。 “咱们中场休息一会,我去接杯水哈”,看着认真听讲的众人,王工很是满意,经常夹在甲乙两方受气的他,这次终于表…

在Spring Boot中使用Sa-Token实现路径拦截和特定接口放行

在Spring Boot中使用Sa-Token实现路径拦截和特定接口放行 很喜欢的一段话:别想太多,好好生活,也许日子过着过着就会有答案,努力走着走着就会有温柔的着落。 春在路上,花在枝上,所有的美好都在路上&#xff…

Coap协议在物联网中的实战

1. 前言 提到CoAP不能不提MQTT协议,MQTT协议可以保持长链接,具有一定的实时性,云端向客户端发送消息,设备端可以在最短的时间内接收并作出响应,所以MQTT更适合于实时控制场景,需要保持长连接,不…

WDF驱动开发-I/O请求的处理(三)

创建框架请求对象 框架请求对象表示 I/O 管理器已发送到驱动程序的 I/O 请求。 基于框架的驱动程序通过调用 框架请求对象方法来处理每个 I/O 请求。 每个 I/O 请求都包含一个 WDM I/O 请求数据包 (IRP 结构) ,但基于框架的驱动程序通常不需要访问 IRP 结构。 大…

【AI大模型】Transformers大模型库(八):大模型微调之LoraConfig

目录 一、引言 二、LoraConfig配置参数 2.1 概述 2.2 LoraConfig参数说明 2.3 代码示例 三、总结 一、引言 这里的Transformers指的是huggingface开发的大模型库,为huggingface上数以万计的预训练大模型提供预测、训练等服务。 🤗 Transformers …

3.2 窗口滚动条

本节讲述窗口滚动条的简单使用方法。如果窗口客户区的内容太多,为了方便浏览窗口客户区的所有内容,就需要在创建窗口时添加窗口垂直或水平滚动条样式。窗口过程处理WM_CREATE消息时初始化滚动条的位置和滚动范围。窗口过程处理WM_VSCROLL或WM_HSCROLL消息…

讲透计算机网络知识(实战篇)01——计算机网络和协议

一、计算机网络和协议 1、网络和互联网络 1.1 网络、互联网、Internet 用交换机、集线器连接在一起的计算机构成一个网络。 用路由器连接多个网络,形成互联网。 全球最大的互联网:Internet。 1.2 网络举例 家庭互联网 图中的无线拨号路由器既是路由…

281 基于matlab的路径规划GUI交互

基于matlab的路径规划GUI交互。包括蚁量系统、蚁周系统、蚁密系统、蚁群系统、免疫混合算法。11种路径规划数据,最多225个规划点。蚁群和免疫算法的参数可进行设置,使得效果最佳。动态显示可视化规划结果。程序已调通,可直接运行。

防止Selenium被检测 Google Chrome 125

背景 最近在使用selenium自动播放学习课程,相信大家也有一些类似的使用场景。 能自动化的事情,绝不自己干。 为防止被检测是机器人做题,刷视频,需要做一些小调整。 先来看作为服务方维护者,是如何检测是Selenium打…

8.transformers量化

Transformers 核心设计Auto Classes Transformers Auto Classes 设计:统一接口、自动检索 AutoClasses 旨在通过全局统一的接口 from_pretrained() ,实现基于名称(路径)自动检索预训练权重(模 型)、配置文件、词汇表等所有与模型相关的抽象。 灵活扩展的配置AutoConfig…

uniapp地图自定义文字和图标

这是我的结构&#xff1a; <map classmap id"map" :latitude"latitude" :longitude"longitude" markertap"handleMarkerClick" :show-location"true" :markers"covers" /> 记住别忘了在data中定义变量…

pip 配置缓存路径

在windows操作平台&#xff0c;默认情况&#xff0c;pip下使用的系统目录 C:\Users\用名名称\AppData\Local\pip C盘是系统盘&#xff0c;如果常常使用pip安装会占用大量的空间很快就满&#xff0c;这时候就有必要变更一下缓存保存路径了。 pip 配置缓存路径&#xff1a; Win…