欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 财经 > 产业 > 【python】三帧差法实现运动目标检测

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

2025/2/6 10:04:17 来源:https://blog.csdn.net/wss794/article/details/145342966  浏览:    关键词:【python】三帧差法实现运动目标检测

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

目录

1 方案

2 实践

① 代码

② 效果图



1 方案

具体步骤如下:

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

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

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

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

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

⑥ 显示结果:使用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)while True:# 读取第三帧ret, frame3 = cap.read()if not ret:breakframe3_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_grayframe2_gray = frame3_gray# 按'q'退出循环if cv2.waitKey(1) & 0xFF == ord('q'):break# 释放资源cap.release()cv2.destroyAllWindows()if __name__ == '__main__':OD("test.mp4")pass

② 效果图

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

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com