opencv2中的函数CamShift,内部调用的是cvCamShift,cvCamShift的内部又使用了cvMeanShift。
cv::RotatedRect cv::CamShift( InputArray _probImage, Rect& window,
TermCriteria criteria )
{
CvConnectedComp comp;
CvBox2D box;
box.center.x = box.center.y = 0; box.angle = 0; box.size.width = box.size.height = 0;
comp.rect.x = comp.rect.y = comp.rect.width = comp.rect.height = 0;
Mat probImage = _probImage.getMat();
CvMat c_probImage = probImage;
cvCamShift(&c_probImage, window, (CvTermCriteria)criteria, &comp, &box);
window = comp.rect;
return RotatedRect(Point2f(box.center), Size2f(box.size), box.angle);
}
int cvCamShift( const CvArr* prob_image, CvRect window, CvTermCriteria criteria,
CvConnectedComp* comp, CvBox2D* box=NULL );
prob_image
目标直方图的反向投影 (见 cvCalcBackProject).
window
初始搜索窗口
criteria
确定窗口搜索停止的准则
comp
生成的结构,包含收敛的搜索窗口坐标 (comp->rect 字段) 与窗口内部所有象素点的和 (comp->area 字段).
box
目标的带边界盒子。如果非 NULL, 则包含目标的尺寸和方向。
函数 cvCamShift 实现了 CAMSHIFT 目标跟踪算法([Bradski98]). 首先它调用函数 cvMeanShift 寻找目标中心,然后计算目标尺寸和方向。最后返回函数 cvMeanShift 中的迭代次数。
(1)CamShift示例代码
// CamShiftDemo.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include "