如何在CamShift中平滑跟踪

时间:2013-03-28 09:46:26

标签: visual-c++ opencv image-processing kalman-filter

我正在使用OpenCV库函数进行项目跟踪。通过使用Camshift()功能,我可以跟踪我的手,但它并不稳定,即使我的手保持稳定,跟踪也没有什么动静。所以我无法在正确的位置执行鼠标点击操作。有人请帮我解决这个问题。

void TrackingObjects::drawRectangle(CvRect objectLocation){
CvPoint p1, p2,mou;
CvRect crop;
p1.x = objectLocation.x;
p2.x = objectLocation.x + objectLocation.width;

p1.y = objectLocation.y;
p2.y = objectLocation.y + objectLocation.height;

cvRectangle(image,p1,p2,CV_RGB(0,255,0),1,CV_AA,0);

mou.x=(p2.x-p1.x)/2;
mou.x=p1.x+mou.x;
mou.y=(p2.y-p1.y)/2;
mou.y=p1.y+mou.y;

SetCursorPos(mou.x,mou.y);

}

在上面的代码中,我通过obectLocation参数得到了跟踪对象的位置,并且我在跟踪区域上绘制了矩形。 通过获得它的中心,我做了鼠标移动。

在关闭手掌以执行MouseDown事件时,已跟踪对象的位置已更改。

1 个答案:

答案 0 :(得分:7)

答案是卡尔曼滤波器。 您可以使用this代码。如下图所示,过滤后的结果(绿线)忽略了跟踪器的突然位移(青色描绘了原始跟踪结果)。

enter image description here