【opencv】均值漂移函数

来源:互联网 发布:iso软件如何卸载 编辑:程序博客网 时间:2024/04/28 01:46

均值漂移前要得到目标的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);  //目标绘制}


原创粉丝点击