【opencv】均值漂移函数

本文介绍了一种基于均值漂移的目标跟踪方法。通过计算目标区域的颜色直方图,并利用该直方图进行反向投影,从而实现目标在连续帧间的定位与跟踪。文章详细阐述了关键步骤,包括直方图计算、反向投影及均值漂移迭代。

均值漂移前要得到目标的Mat(choseAim)以及Rect(rect)

首先计算第一次的dstHist

然后将dstHist,rect,image(待处理图原图,下一帧)扔到均值漂移函数中

之后循环即可


//均值漂移参数
Mat choseAim;
Mat targetImageHSV;
int histSize=200;  
float histR[]={0,255};  
const float *histRange=histR;  
int channels[]={0,1}; 
Mat dstHist;
//计算dstHist,以便均值漂移
cvtColor(choseAim, targetImageHSV, CV_RGB2HSV);
calcHist(&targetImageHSV, 2, channels, Mat(), dstHist, 1, &histSize, &histRange, true, false);  		
normalize(dstHist, dstHist, 0, 255, CV_MINMAX);

//************************************
// Description: 均值漂移函数
// Method:    meanShiftTracking
// FullName:  meanShiftTracking
// Access:    public 
// Parameter: Mat image 待检测图像
// Parameter: Rect & rect 上一帧目标位置
// Parameter: Mat dstHist 上一帧目标hist
// Returns:   void
// Author:    小白
// Date:      2017/07/03
//************************************
void meanShiftTracking(Mat image, Rect& rect, Mat dstHist)
{
    Mat imageHSV;
    Mat calcBackImage;
    cvtColor(image, imageHSV, CV_RGB2HSV);
    calcBackProject(&imageHSV, 2, channels, dstHist, calcBackImage, &histRange);  //反向投影
    TermCriteria criteria(TermCriteria::MAX_ITER + TermCriteria::EPS, 1000, 0.001);  
    meanShift(calcBackImage, rect, criteria);   
    Mat imageROI=imageHSV(rect);   //更新模板			
    targetImageHSV=imageHSV(rect);
    calcHist(&imageROI, 2, channels, Mat(), dstHist, 1, &histSize, &histRange);  
    normalize(dstHist, dstHist, 0.0, 1.0, NORM_MINMAX);   //归一化
    rectangle(image, rect, Scalar(0, 0, 255), 3);  	//目标绘制	
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值