Bootstrap

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

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

目录

1 方案

2 实践

① 代码

② 效果图



1 方案

具体的步骤如下:

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

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

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

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

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

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

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

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

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

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

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

2 实践

① 代码

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)
    ret, frame3 = cap.read()
    frame3_gray = cv2.cvtColor(frame3, cv2.COLOR_BGR2GRAY)
    while True:
        # 读取下一帧
        ret, frame4 = cap.read()
        if not ret:
            break
        frame4_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_gray
        frame2_gray = frame3_gray
        frame3_gray = frame4_gray
        # 按'q'退出循环
        if cv2.waitKey(1) & 0xFF == ord('q'):
            break
    # 释放资源
    cap.release()
    cv2.destroyAllWindows()


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

② 效果图

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

悦读

道可道,非常道;名可名,非常名。 无名,天地之始,有名,万物之母。 故常无欲,以观其妙,常有欲,以观其徼。 此两者,同出而异名,同谓之玄,玄之又玄,众妙之门。

;