Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Visual c++ 如何在CamShift中平滑跟踪_Visual C++_Opencv_Image Processing_Kalman Filter - Fatal编程技术网

Visual c++ 如何在CamShift中平滑跟踪

Visual c++ 如何在CamShift中平滑跟踪,visual-c++,opencv,image-processing,kalman-filter,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 +

我正在使用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
参数获得跟踪对象的位置,并在跟踪区域上绘制了矩形。 通过得到它的中心,我做了鼠标移动


当关闭手掌以执行鼠标向下事件时,被跟踪对象的位置已被更改。

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