三帧差法的实现

三帧差法是常用的运动目标检测方法,通过比较图像序列中相邻三帧的像素差分,二值化处理后确定运动区域。在环境亮度稳定时,根据像素值变化阈值区分背景与前景。该方法实时性好,计算量小,但对噪声敏感,阈值选取至关重要,可能无法完整提取颜色一致的大目标。
摘要由CSDN通过智能技术生成

 帧差法是最为常用的运动目标检测和分割方法之一,基本原理就是在图像序列相邻两帧或三帧间采用基于像素的时间差分通过闭值化来提取出图像中的运动区域。首先,将相邻帧图像对应像素值相减得到差分图像,然后对差分图像二值化,在环境亮度变化不大的情况下,如果对应像素值变化小于事先确定的阂值时,可以认为此处为背景像素:如果图像区域的像素值变化很大,可以认为这是由于图像中运动物体引起的,将这些区域标记为前景像素,利用标记的像素区域可以确定运动目标在图像中的位置。由于相邻两帧间的时间间隔非常短,用前一帧图像作为当前帧的背景模型具有较好的实时性,其背景不积累,且更新速度快、算法简单、计算量小。算法的不足在于对环境噪声较为敏感,闽值的选择相当关键,选择过低不足以抑制图像中的噪声,过高则忽略了图像中有用的变化。对于比较大的、颜色一致的运动目标,有可能在目标内部产生空洞,无法完整地提取运动目标。

环境:vs2010+opencv2.3

//自己写的帧差法

#include <highgui.h>
#include <cv.h>
#include <math.h>
#include <cxcore.h>
 #define threshold_diff1 45 //设置简单帧差法阈值


 #define threshold_diff2 45 //设置简单帧差法阈值
void ImageGray(IplImage *sourceImage, IplImage *grayImage);
int main(int argc, char* argv[])
{
cvNamedWindow("src",CV_WINDOW_AUTOSIZE); //建立窗口
cvNamedWindow("dst",CV_WINDOW_AUTOSIZE);

    CvCapture *capture=cvCreateFileCapture("E:\\新建文件夹\\行车视频.avi"); //读取视频


     IplImage *mframe=NULL; //读入视频帧
IplImage *gray_diff,*gray_diff1, *gray_diff2,*img1,*img2,*img3,*gray1,*gray2,*gray3,*gray;
     int ncount=0;       //帧计数
 while(mframe=cvQueryFrame(capture))
{   
ncount+=1;
if(ncount==1)
  {
   
img1=cvCreateImage(cvGetSize(mframe),IPL_DEPTH_8U,1);
img2=cvCreateImage(cvGetSize(mframe),IPL_DEPTH_8U,1);
img3=cvCreateImage(cvGetSize(mframe),IPL_DEPTH_8U,1);
gray1=cvCreateImage(cvGetSize(mframe),IPL_DEPTH_8U,1);
gray2=cvCreateImage(cvGetSize(mframe),IPL_DEPTH_8U,1);
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值