2013-03-28 4 views
4

Я выполняю проект под рукой Отслеживание с использованием функции библиотеки OpenCV. Используя функцию Camshift(), я смог отслеживать свои руки, но это было не совсем стабильно, даже если я уверен, что моя рука стабильна, в отслеживании мало движения. Поэтому я не смог выполнить операцию щелчка мыши в правильном положении. Кто-то, пожалуйста, помогите мне разобраться в этом.Как сгладить отслеживание в 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, положение отслеживаемого объекта изменилось.

+0

В чем вопрос? – Safir

ответ

7

Ответ - фильтры Калмана. Вы можете использовать код this. Как вы можете видеть на рисунке ниже, отфильтрованные результаты (зеленая линия) игнорируют внезапные перемещения трекера (где cyan отображает исходные результаты отслеживания).

enter image description here

Смежные вопросы