opencv 运动检测 二帧差法

                                opencv 运动检测  二帧差法

 

 1. 帧差法基本原理

    帧间差分法是一种通过对视频图像序列的连续两帧图像做差分运算获取运动目标轮廓的方法。当监控场景中出现异常目标运动时,相邻两帧图像之间会出现较为明显的差别,两帧相减,求得图像对应位置像素值差的绝对值,判断其是否大于某一阈值,进而分析视频或图像序列的物体运动特性。

 

帧差法的实现非常简单:

 

   如图可见,由目标运动引起的运动变化区域,包括运动目标在前后两帧中的共同位置(图中黑色区域)、在当前帧中新显露出的背景区域和新覆盖的背景区域三部分。

数学原理:

                 

 

直接上代码:

#include <opencv2/opencv.hpp>
using namespace std;
using namespace cv;

int main()
{
	//读入视频  
	VideoCapture capture("Laboratory_raw.avi");
	//VideoCapture capture(0);

	Mat tempframe, currentframe, previousframe, difframe;
	Mat frame;
	int framenum = 0;
	//读取一帧处理  
	while (true)
	{
		if (!capture.isOpened())
		{
			cout << "read video failure" << endl;
			return -1;
		}
		//tempframe = capture.read(frame);  
		capture >> frame;
		imshow("原视频", frame);
		previousframe = frame.clone();

		capture >> frame;
		currentframe = frame.clone();

		cvtColor(previousframe, previousframe, CV_BGR2GRAY);
		cvtColor(currentframe, currentframe, CV_BGR2GRAY);
		absdiff(currentframe, previousframe, difframe);//做差求绝对值    
		threshold(difframe, tempframe, 20, 255.0, CV_THRESH_BINARY);
		dilate(tempframe, tempframe, Mat());//膨胀  
		erode(tempframe, tempframe, Mat());//腐蚀

		imshow("运动目标", tempframe);

		waitKey(50);
	}//end while    
}

 

运行结果:

 

 

优缺点

  优点:算法实现简单,程序设计复杂度低,运行速度快动态环境自适应性强对场景光线变化不敏感。

  缺点:“空洞”现象(运动物体内部灰度值相近);“双影”现象(差分图像物体边缘轮廓较粗);不能提取出运动对象的完整区域,仅能提取轮廓;算法效果严重依赖所选取的帧间时间间隔和分割阈值。

 

希望对你有帮助。 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一颗小树x

您的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值