【python】四帧差法实现运动目标检测

四帧差法是一种运动目标检测技术,它通过比较连续四帧图像之间的差异来检测运动物体。这种方法可以在一定的程度上提高检测的准确性。

目录

1 方案

2 实践

① 代码

② 效果图



1 方案

具体的步骤如下:

① 读取视频流:使用cv2.VideoCapture()读取视频文件。

② 读取初始的三帧图像:连续读取三帧图像并将其转换为灰度图。

③ 读取新帧:循环中,读取新的第四帧并将其转换为灰度图,保持队列中有四帧。

④ 计算帧间差:使用cv2.absdiff计算连续帧之间的差值。

⑤ 差值叠加:将三个帧间差值相加,以增强运动区域的对比度。

⑥ 阈值处理:使用cv2.threshold将叠加后的差值图像转换为二值图像。

⑦ 形态学闭运算:使用cv2.morphologyEx进行闭运算,去除噪声,填充运动物体的轮廓。

⑧ 显示结果:使用cv2.imshow显示检测到的运动区域和当前帧。

⑨ 更新帧:将当前帧更新为下一帧,以便在循环中持续检测运动。

⑩ 退出循环:按’q’键退出程序。

四帧差法通过增加参考帧的数量,可以更准确地检测运动物体,尤其在复杂背景下表现更佳。与三帧差法相比,这种方法也会增加一些计算量。

2 实践

① 代码

import cv2
import numpy as npdef OD(video_path):# 初始化摄像头cap = cv2.VideoCapture(video_path)# 读取前四帧ret, frame1 = cap.read()frame1_gray = cv2.cvtColor(frame1, cv2.COLOR_BGR2GRAY)ret, frame2 = cap.read()frame2_gray = cv2.cvtColor(frame2, cv2.COLOR_BGR2GRAY)ret, frame3 = cap.read()frame3_gray = cv2.cvtColor(frame3, cv2.COLOR_BGR2GRAY)while True:# 读取下一帧ret, frame4 = cap.read()if not ret:breakframe4_gray = cv2.cvtColor(frame4, cv2.COLOR_BGR2GRAY)# 计算帧间差diff1 = cv2.absdiff(frame1_gray, frame2_gray)diff2 = cv2.absdiff(frame2_gray, frame3_gray)diff3 = cv2.absdiff(frame3_gray, frame4_gray)# 将三帧差相加diff_total = cv2.add(diff1, diff2)diff_total = cv2.add(diff_total, diff3)# 应用阈值处理_, thresh = cv2.threshold(diff_total, 30, 255, cv2.THRESH_BINARY)# 形态学闭运算,去除噪声kernel = np.ones((5, 5), np.uint8)closing = cv2.morphologyEx(thresh, cv2.MORPH_CLOSE, kernel)# 显示结果cv2.imshow('Video', frame4)cv2.imshow('Motion Detection', closing)# 更新帧frame1_gray = frame2_grayframe2_gray = frame3_grayframe3_gray = frame4_gray# 按'q'退出循环if cv2.waitKey(1) & 0xFF == ord('q'):break# 释放资源cap.release()cv2.destroyAllWindows()if __name__ == '__main__':OD("test.mp4")pass

② 效果图

至此,本文分享的内容就结束啦。

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

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

相关文章

Spring--SpringMVC使用(接收和响应数据、RESTFul风格设计、其他扩展)

SpringMVC使用 二.SpringMVC接收数据2.1访问路径设置2.2接收参数1.param和json2.param接收数据3 路径 参数接收4.json参数接收 2.3接收cookie数据2.4接收请求头数据2.5原生api获取2.6共享域对象 三.SringMVC响应数据3.1返回json数据ResponseBodyRestController 3.2返回静态资源…

又是一年啊

又是一年 回顾2024一、2024的愿望二、愿望实现了吗?三、总结 展望2025几个愿望~~(终于快写完了)~~ 华丽结尾 回顾2024 一、2024的愿望 1.CSP-J上岸; 2.小升初上岸; 3.数学进入联赛班; 4.初一期末年级前五…

直线拟合例子 ,岭回归拟合直线

目录 直线拟合,算出离群点 岭回归拟合直线: 直线拟合,算出离群点 import cv2 import numpy as np# 输入的点 points np.array([[51, 149],[122, 374],[225, 376],[340, 382],[463, 391],[535, 298],[596, 400],[689, 406],[821, 407] ], dtypenp.float32)# 使用…

如何解压rar格式文件?8种方法(Win/Mac/手机/网页端)

RAR 文件是一种常见的压缩文件格式,由尤金・罗谢尔(Eugene Roshal)开发,因其扩展名 “rar” 而得名。它通过特定算法将一个或多个文件、文件夹进行压缩,大幅减小存储空间,方便数据传输与备份。然而&#xf…

【软件测试项目实战 】淘宝网:商品购买功能测试

一、用例设计方法分析 在对淘宝网商品下单功能进行测试时,不同的测试角度和场景适合运用不同的用例设计方法,以下是针对该功能各方面测试所适用方法及其原因的分析: 商品数量相关测试:对于商品数量的测试,主要采用等…

失业ing

零零碎碎记一下unity相关的东西备忘 渲染: https://github.com/festivities/PrimoToon 仿原神的卡通渲染, 参照这种文档: Unity Built-in Shader转URP Shader 接口查询对照表之类的 自己强行改api到urp可用,改了三四天&…

Centos类型服务器等保测评整/etc/pam.d/system-auth

修改服务器配置文件/etc/pam.d/system-auth,但是,把一下配置放在password的配置第一行才会生效 执行命令:配置口令要求:大小写字母、数字、特殊字符组合、至少8位,包括强制设置root口令! sed -i 14a pas…

使用LabVIEW的History功能实现队列数据的读取而不清空

在LabVIEW中,有多种方法可以读取队列中的数据而不清空它。使用 Dequeue Element 和 Enqueue Element 函数可以实现读取并重新插入数据回队列,但当需要处理大数据流或需要更动态的解决方案时,这种方法可能会变得繁琐。一个更高效的解决方案是利…

科普篇 | “机架、塔式、刀片”三类服务器对比

一、引言 在互联网的世界里,服务器就像是默默运转的超级大脑,支撑着我们日常使用的各种网络服务。今天,咱们来聊聊服务器家族中的三位 “明星成员”:机架式服务器、塔式服务器和刀片式服务器。如果把互联网比作一座庞大的城市&…

Vivado生成X1或X4位宽mcs文件并固化到flash

1.生成mcs文件 01.在vivado里的菜单栏选择"tools"工具栏 02.在"tools"里选择"生成内存配置文件" 03.配置参数 按照FPGA板上的flash型号进行选型,相关配置步骤可参考下图。 注意:Flash数据传输位宽如果需要选择X4位宽&am…

frida的常用api

1、Hook普通方法、打印参数和修改返回值 Hook函数 Hook代码 function hookTest1(){var utils Java.use("com.zj.wuaipojie.Demo");utils.a.implementation function(str){// a "test";var retval this.a(str);console.log(str , retval);return retva…

Prometheus部署及linux、mysql、monog、redis、RocketMQ、java_jvm监控配置

Prometheus部署及linux、mysql、monog、redis、RocketMQ、java_jvm监控配置 1.Prometheus部署1.2.Prometheus修改默认端口 2.grafana可视化页面部署3.alertmanager部署4.监控配置4.1.主机监控node-exporter4.2.监控mysql数据库mysqld_exporter4.3.监控mongod数据库mongodb_expo…

Android AOP:aspectjx

加入引用 在整个项目的 build.gradle 中,添加 classpath "com.hujiang.aspectjx:gradle-android-plugin-aspectjx:2.0.10" 可以看到测试demo的 gradle 版本是很低的。 基于 github 上的文档,可以看到原版只支持到 gradle 4.4 。后续需要使…

Unity URP 获取/设置 Light-Indirect Multiplier

Unity URP 获取/设置 Light-Indirect Multiplier 他喵的代码的字段名称叫:bounceIntensity ~~~~~~

计算机网络-网络层

重点内容: (1) 虚拟互连网络的概念。 (2) IP 地址与物理地址的关系。 (3) 传统的分类的 IP 地址(包括子网掩码)和无分类域间路由选择 CIDR 。 (4) 路由选择协议的工作原理。 目录 重点内容: 一.网络层提供的两种服务 二…

2024年博客之星主题创作|2024年蓝桥杯与数学建模年度总结与心得

引言 2024年,我在蓝桥杯编程竞赛和数学建模竞赛中投入了大量时间和精力,这两项活动不仅加深了我对算法、数据结构、数学建模方法的理解,还提升了我的解决实际问题的能力。从蓝桥杯的算法挑战到数学建模的复杂应用,我在这些竞赛中…

虚拟头节点和双指针解决链表问题(合并,与分解操作,力扣题目为例)

Problem: 21. 合并两个有序链表 Problem: 86. 分隔链表 文章目录 总览说明题目描述思路复杂度Code总结分析 总览说明 在解决链表相关的算法题目时较多使用到的技巧就是虚拟头节点、双指针,而题目往往都会涉及到对链表的分解、合并操作,本文选择两个题目将…

Gaea项目的挑战与机遇:去中心化AI平台的未来发展

尽管Gaea在去中心化AI领域展示了巨大的潜力,但在实际操作中仍然面临一些挑战。首先,平台的用户参与度至关重要。如果用户参与的资源不足,平台的计算能力和带宽资源将受到限制,从而影响AI项目的运行效率。因此,如何吸引…

项目练习:若依后台管理系统-后端服务开发步骤(springboot单节点版本)

文章目录 1、用Maven搭建项目脚手架&#xff0c;父子工程依赖。2、引入SpringBoot Web容器依赖3、引入Mybatisdruid依赖4、实现接口查询数据5、整合logback日志功能6、集成Redis 1、用Maven搭建项目脚手架&#xff0c;父子工程依赖。 root模块的pom添加plugin配置 <build>…

批量创建ES索引

7.x from elasticsearch import Elasticsearch# 配置 Elasticsearch 连接 # 替换为你的 Elasticsearch 地址、端口、用户名和密码 es Elasticsearch([http://10.10.x.x:43885],basic_auth(admin, XN272G9THEAPYD5N5QORX3PB1TSQELLB) )# # 测试连接 # try: # # 尝试获取集…