如何在 CamShift 中平滑跟踪

Posted

技术标签:

【中文标题】如何在 CamShift 中平滑跟踪【英文标题】:How to Smooth the Tracking in CamShift 【发布时间】:2013-03-28 09:46:26 【问题描述】:

我正在使用 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】:

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

【讨论】:

以上是关于如何在 CamShift 中平滑跟踪的主要内容,如果未能解决你的问题,请参考以下文章

如何在纯 JavaScript 中平滑滚动到元素

如何在opengl中平滑多个四边形的纹理

如何在 Matlab 中平滑阶梯状图

如何在 Java 中平滑 JFrame 的滚动

如何在 iOS 中平滑放大和缩小 UIButton

如何在 as3 中平滑图像的“缩放”和“平移”