我正在使用 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
事件,被跟踪对象的位置已改变。
答案是卡尔曼滤波器。
您可以使用this代码。如下图所示,过滤后的结果(绿线)忽略了跟踪器的突然位移(其中青色表示原始跟踪结果)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)