运动检测——帧间差分法的实现 by python and opencv

本文介绍了一种基于帧间差分法的运动物体检测方法,并提供了详细的步骤及OpenCV实现代码。该方法通过比较连续两帧图像的像素差值来识别运动目标。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

帧间差分法是通过比较两帧之间的像素差来确定运动的物体,是一种常用的运动检测方法。如果物体是运动的,那么在视频中两帧之间其所在位置的像素是不一样的,我们只需要求出两帧之间的像素差,并设定一个阈值,就能轻易地检测出视频中运动的物体。其具体步骤为:
1、读取视频
2、选取两帧
3、灰度化
4、滤波
5、帧间做差
6、二值化
7、形态学操作

其中,opencv中的absdiff可以轻易实现求两幅灰度图像的差值图像。
https://blog.csdn.net/tezhongjunxue/article/details/14492101
等许多博主的文章思想是通过对视频帧数的提取来实现帧间差分法,但在此处,我使用一种更加有趣的方法来实现帧间差分法:使用 cv.waitKey

具体代码如下,由于是使用的mp4格式,每两帧之间的时间差为33ms,waitKey(660)表示间隔20帧

def absdiff_demo(image_1, image_2, sThre):
    gray_image_1 = cv.cvtColor(image_1, cv.COLOR_BGR2GRAY)  #灰度化
    gray_image_1 = cv.GaussianBlur(gray_image_1, (3, 3), 0)  #高斯滤波
    gray_image_2 = cv.cvtColor(image_2, cv.COLOR_BGR2GRAY)
    gray_image_2 = cv.GaussianBlur(gray_image_2, (3, 3), 0)
    d_frame = cv.absdiff(gray_image_1, gray_image_2)
    ret, d_frame = cv.threshold(d_frame, sThre, 255, cv.THRESH_BINARY)
    return d_frame


capture = cv.VideoCapture("C:\\Users\\xxx\\Desktop\\2.mp4")
sThre = 5 #sThre表示像素阈值
i = 0
while(True):
    ret, frame = capture.read()
    if i == 0:
        cv.waitKey(660)
        i = i + 1
    ret_2, frame_2 = capture.read()
    d_frame = absdiff_demo(frame, frame_2, sThre)
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值