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

帧差法,用公式表达就是

result=currentFrame-previousFrame

如果在同一背景下,目标静止,则相邻两帧图像无变化,帧差为0;

如果目标正在运动,那么帧差不为0,可以根据帧差图像跟踪目标大致位置


视频原画面

帧差法Motion Detection(基于EmguCV实现)_第1张图片

帧差结果

帧差法Motion Detection(基于EmguCV实现)_第2张图片

原画面

帧差法Motion Detection(基于EmguCV实现)_第3张图片

帧差:

帧差法Motion Detection(基于EmguCV实现)_第4张图片


摄像头原画面(脸部已裁掉):

帧差法Motion Detection(基于EmguCV实现)_第5张图片

帧差(显然,摇动头部时才可以看到较亮的轮廓,静止时帧差为0,纯黑一片):

帧差法Motion Detection(基于EmguCV实现)_第6张图片


核心代码如下

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链接

点此领取楼主


你可能感兴趣的:(OpenCV,EmguCV)