基于opencv运动检测的一些方法

         因为监控发展的需求,目前前景检测的研究还是很多的,也出现了很多新的方法和思路。个人了解的大概概括为以下一些:

        帧差、背景减除(GMM、CodeBook、 SOBS、 SACON、 VIBE、 W4、多帧平均……)、光流(稀疏光流、稠密光流)、运动竞争(Motion Competition)、运动模版(运动历史图像)、时间熵……等等。如果加上他们的改进版,那就是很大的一个家族了。

       对于上一些方法的一点简单的对比分析可以参考下:http://www.cnblogs.com/ronny/archive/2012/04/12/2444053.html

       至于哪个最好,看使用环境吧,各有千秋,有一些适用的情况更多,有一些在某些情况下表现更好。这些都需要针对自己的使用情况作测试确定的。呵呵。

       推荐一个牛逼的库:http://code.google.com/p/bgslibrary/里面包含了各种背景减除的方法,可以让自己少做很多力气活。

       还有王先荣博客上存在不少的分析:http://www.cnblogs.com/xrwang/archive/2010/02/21/ForegroundDetection.html

       下面的博客上转载王先荣的上面几篇,然后加上自己分析了两篇:http://blog.csdn.NET/stellar0

/**************帧差法************/
#include<opencv2/opencv.hpp>
#include<iostream>


using namespace std;
using namespace cv;


int main()
{
    VideoCapture capture("test.avi");//获取视频
    if (!capture.isOpened())
        return -1;
    double rate = capture.get(CV_CAP_PROP_FPS);//获取视频帧率
    int delay = 1000 / rate;
    Mat framepro, frame, dframe;
    bool flag = false;
    namedWindow("image");
    namedWindow("test");
    while (capture.read(frame))
    {
        if (false == flag)
        {
            framepro = frame.clone();//将第一帧图像拷贝给framePro
            flag = true;
        }
        else
        {
            absdiff(frame, framepro, dframe);//帧间差分计算两幅图像各个通道的相对应元素的差的绝对值函数 AbsDiff 计算两个数组差的绝对值。
            framepro = frame.clone();//将当前帧拷贝给framepro
            threshold(dframe, dframe, 40, 255, CV_THRESH_BINARY);//阈值分割
            imshow("image", frame);
            imshow("test", dframe);
            waitKey(delay);
        }
    }
    waitKey();
    return 0;
}

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值