DSP

帧差法Motion Detection(基于EmguCV实现)

2019-07-13 19:06发布

帧差法,用公式表达就是 result=currentFrame-previousFrame 如果在同一背景下,目标静止,则相邻两帧图像无变化,帧差为0; 如果目标正在运动,那么帧差不为0,可以根据帧差图像跟踪目标大致位置
视频原画面
帧差结果
原画面
帧差:

摄像头原画面(脸部已裁掉):
帧差(显然,摇动头部时才可以看到较亮的轮廓,静止时帧差为0,纯黑一片):

核心代码如下 private void menuItemCameraCapture_Click(object sender, EventArgs e) { // 部分代码已省略... try { capture = new Capture(); previousFrame = capture.RetrieveBgrFrame(); // 第一帧 capture.ImageGrabbed += OnCameraCapture_ImageGrabbed; } catch (Exception ex) { MessageBox.Show(ex.Message); } } private void OnCameraCapture_ImageGrabbed(object sender, EventArgs e) { currentFrame = capture.RetrieveBgrFrame(); ++frameCount; imageBoxCameraCapture.Image = currentFrame; imageBoxResult.Image = currentFrame.Sub(previousFrame); //帧差 previousFrame = currentFrame.Clone(); //请使用'Clone'而不是'=' // 部分代码已省略... }

完整项目及源码参见这篇文章的GitHub链接 点此领取楼主