OpenCV4学习笔记(35)——基于帧差法的运动检测

在之前的《OpenCV4学习笔记(33)——KLT稀疏光流跟踪算法》《OpenCV4学习笔记(34)——Farneback稠密光流算法》这两篇博文中,整理记录了基于稀疏光流跟踪和稠密光流跟踪算法实现的运动检测,而今天要记录的是另外一种实现运动检测的方法,那就是基于帧差法的运动检测。

帧差法,也叫做帧间差分法,这里引用百度百科上的一段定义:

帧间差分法是一种通过对视频图像序列中相邻两帧作差分运算来获得运动目标轮廓的方法,它可以很好地适用于存在多个运动目标和摄像机移动的情况。当监控场景中出现异常物体运动时,帧与帧之间会出现较为明显的差别,两帧相减,得到两帧图像亮度差的绝对值,判断它是否大于阈值来分析视频或图像序列的运动特性,确定图像序列中有无物体运动。图像序列逐帧的差分,相当于对图像序列进行了时域下的高通滤波。

最简单的帧差法就是二帧差分法,将视频流中的前后两帧图像转换为灰度图像,再经过高斯模糊消除噪声干扰,然后将两帧图像进行相减操作得到两帧图像之间的差异区域,再对差异图像进行二值分割把差异区域作为前景、不变区域作为背景,并且进行开运算操作来消除一些微小干扰。这样,就得到了两帧图像中明显不同的区域,也就是运动的目标物体。

下面看一下演示代码:

	VideoCapture capture;
	capture.open("D:\\opencv_c++\\opencv_tutorial\\data\\images\\bike.avi");
	//capture.open("D:\\OpenCV\\opencv\\sources\\samples\\data\\vtest.avi");
	if (!capture.isOpened())
	{
   
		return 0;
	}
	//两帧差法
	Mat pre_frame, current_frame, pre_gray, current_gray, pre_gaus, current_gaus;
	capture.read(pre_frame);
	cvtColor(pre_frame, pre_gray, COLOR_BGR2GRAY);
	GaussianBlur(pre_gray, pre_gaus, Size(), 5, 5);
	while (capture.read(current_frame))
	{
   
		cvtColor(current_frame, current_gray, COLOR_BGR2GRAY
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值