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

++++三帧差法++++ 是一种常用的运动目标检测方法,它通过比较连续三帧图像之间的差异来检测运动物体。这种方法尤其适用于背景变化较小的场景。

目录

[1 方案](#1 方案)

[2 实践](#2 实践)

[① 代码](#① 代码)

[② 效果图](#② 效果图)



1 方案

具体步骤如下:

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

② ++++灰度++++ ++++化++++:将彩色图像转换为灰度图,简化后续计算。

③ ++++帧间差分++++:计算连续三帧之间的差分,absdiff函数计算两个灰度图像的绝对差值。然后,将两帧差相加。

④ ++++阈值处理++++:使用threshold函数将差分图像转换为二值图像,突出运动区域。

⑤ ++++形态学操作++++:应用闭运算(morphologyEx)去除小的噪声点。

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

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

⑧ ++++退出循环++++:按'q'键退出程序。

需要注意的是,三帧差法仅适用于背景相对静止 的场景。如果背景的变化较大,则需要更复杂的方法(背景减除或自适应阈值技术)。

2 实践

① 代码

python 复制代码
import cv2
import numpy as np


def 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)
    while True:
        # 读取第三帧
        ret, frame3 = cap.read()
        if not ret:
            break
        frame3_gray = cv2.cvtColor(frame3, cv2.COLOR_BGR2GRAY)
        # 计算帧间差
        diff1 = cv2.absdiff(frame1_gray, frame2_gray)
        diff2 = cv2.absdiff(frame2_gray, frame3_gray)
        # 将两帧差相加
        diff = cv2.add(diff1, diff2)
        # 应用阈值来提取运动区域
        _, thresh = cv2.threshold(diff, 30, 255, cv2.THRESH_BINARY)
        # 使用形态学操作去除噪声
        kernel = np.ones((5, 5), np.uint8)
        closing = cv2.morphologyEx(thresh, cv2.MORPH_CLOSE, kernel)
        # 显示结果
        cv2.imshow("video", frame3)
        cv2.imshow('Motion Detection', closing)
        # 更新帧
        frame1_gray = frame2_gray
        frame2_gray = frame3_gray
        # 按'q'退出循环
        if cv2.waitKey(1) & 0xFF == ord('q'):
            break
    # 释放资源
    cap.release()
    cv2.destroyAllWindows()


if __name__ == '__main__':
    OD("test.mp4")
    pass

② 效果图

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

相关推荐
我送炭你添花11 分钟前
Pelco KBD300A 模拟器:06+2.Pelco KBD300A 模拟器项目重构指南
python·重构·自动化·运维开发
Swizard13 分钟前
别再只会算直线距离了!用“马氏距离”揪出那个伪装的数据“卧底”
python·算法·ai
站大爷IP14 分钟前
Python函数与模块化编程:局部变量与全局变量的深度解析
python
我命由我1234522 分钟前
Python Flask 开发问题:ImportError: cannot import name ‘Markup‘ from ‘flask‘
开发语言·后端·python·学习·flask·学习方法·python3.11
databook31 分钟前
掌握相关性分析:读懂数据间的“悄悄话”
python·数据挖掘·数据分析
一个没有感情的程序猿35 分钟前
前端实现人体骨架检测与姿态对比:基于 MediaPipe 的完整方案
机器学习·计算机视觉·前端框架·开源
全栈陈序员1 小时前
【Python】基础语法入门(二十)——项目实战:从零构建命令行 To-Do List 应用
开发语言·人工智能·python·学习
jcsx1 小时前
如何将django项目发布为https
python·https·django
岁月宁静1 小时前
LangGraph 技术详解:基于图结构的 AI 工作流与多智能体编排框架
前端·python·langchain
百锦再1 小时前
京东云鼎入驻方案解读——通往协同的“高架桥”与“快速路”
android·java·python·rust·django·restful·京东云