opencv关于图像均值漂移cvRunningAvg的运用

本文介绍了如何使用OpenCV中的cvRunningAvg函数进行图像的均值漂移处理,该函数用于更新移动平均,常用于目标跟踪。通过示例代码展示了从原图到输出前景和背景图的转换过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

cvRunningAvg函数,作用:用来更新移动平均。又被称为跟踪器,在目标跟踪中具有重要意义。

函数形式:

void cvRunningAvg(const CvArr * image, CvArr* acc, double alpha, const CvArr* mask=NULL)NULL)

参数说明:

image:输入图像,1或3通道,8比特或32比特的float型

acc累加器:,和image一样大小

alpha:更新时,image所占的权重

mask:操作符掩码

if mask(x,y)!= 0 (1-alpha)*acc(x,y)+alpha*image(x,y) =>acc(x,y)

下面使用cvRunningAvg函数,再次实现背景去除的平均法。为了实现这一方法,需要知道场景中像素的均值漂移值从而得出绝对差分的均值和均值漂移,该均值漂移代替图像的标准偏差。程序实现的效果如下:

原图:  输出后景图:

输出前景图:

程序代码如下:

#include <stdio.h>
#include <cv.h>
#include <highgui.h>


using namespace std;
using namespace cv;


int main()
{
IplImage *pFrame=NULL;
IplImage *pFrImg=NULL;
IplImage *pBkImg=NULL;


CvMat *pFrameMat=NULL;
CvMat *pFrMat=NULL;
CvMat *pBkMat=NULL;
int nFrmNum=0;


cvNamedWindow("video",1);
cvNamedWindow("background",1);
cvNamedWindow("foreground",1);


cvMoveWindow("video",30,0);//移动窗口
cvMoveWindow("background",360,0);
cvMoveWindow("foreground",690,0);


pFrame=cvLoadImage("f.jpg");
pBkImg=cvCreateImage(cvSize(pFrame->width,pFrame->height),IPL_DEPTH_8U,1);
pFrImg=cvCreateImage(cvSize(pFrame->width,pFrame->height),IPL_DEPTH_8U,1);


pBkMat=cvCreateMat(pFrame->height,pFrame->width,CV_32FC1);
pFrMat=cvCreateMat(pFrame->height,pFrame->width,CV_32FC1);
pFrameMat=cvCreateMat(pFrame->height,pFrame->width,CV_32FC1);


cvCvtColor(pFrame,pBkImg,CV_BGR2GRAY);//彩色空间转换
cvCvtColor(pFrame,pFrImg,CV_BGR2GRAY);


cvConvert(pFrImg,pFrameMat);//灰度转化
cvConvert(pFrImg,pFrMat);
cvConvert(pFrImg,pBkMat);


cvSmooth(pFrameMat,pFrameMat,CV_GAUSSIAN,3,0,0,0);//高斯滤波,以平滑图像
cvAbsDiff(pFrameMat,pBkMat,pFrMat);//当前帧跟背景图像相减
cvThreshold(pFrMat,pFrImg,60,255.0,CV_THRESH_BINARY);//二值化前景图
cvRunningAvg(pFrameMat,pBkMat,0.003,0);//更新背景
cvConvert(pBkMat,pBkImg);//将背景转化为图像格式,用以显示


cvShowImage("video",pFrame);
cvShowImage("background",pBkImg);
cvShowImage("foreground",pFrImg);
cvSaveImage("background.jpg",pBkImg);
cvSaveImage("foreground.jpg",pFrImg);


cvWaitKey(0);
cvDestroyWindow("video");
cvDestroyWindow("background");
cvDestroyWindow("foreground");


cvReleaseImage(&pFrImg);
cvReleaseImage(&pBkImg);
cvReleaseMat(&pFrameMat);
cvReleaseMat(&pFrMat);
cvReleaseMat(&pBkMat);
return 0;
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值