Как нарисовать движение при отслеживании объекта?

Я использую веб-камеру и использую openCV для получения каждого кадра и отслеживания положения объекта.

В общем, у меня есть одно очко в каждом кадре. Но как я могу нарисовать картину движения в режиме реального времени?

Нужен ли таймер для записи нескольких точек в определенное время и рисования линий?

И как в цикле while, я просто извлекаю один кадр, я не думаю, что если я нарисую линию на этом текущем кадре, я все равно смогу удерживать линию в следующем кадре. Так как я должен отображать движение?

while( true )
{
//Read the video stream
capture = cvCaptureFromCAM(1);
frame = cvQueryFrame( capture );

//Apply the classifier to the frame
detectAndDisplay(frame); // I got a point from this function

// waitkey enter
int c = waitKey(10);
if( (char)c == 27 ) { exit(0); }

}

2

Решение

Используйте вектор, чтобы удерживать позиции, а затем нарисуйте их на каждом кадре.
Обратите внимание, что ваша функция должна вернуть обнаруженную точку. Я изменил его имя, потому что он не рисует в этот момент. Вы можете исправить это позже.

vector<CvPoint> trajectory;
Vec3b mycolor(100,0,0);

while( true )
{
//Read the video stream
capture = cvCaptureFromCAM(1);
frame = cvQueryFrame( capture );

//Apply the classifier to the frame
CvPoint cur_pnt=detect(frame); // I got a point from this function
trajectory.push_back(cur_point);

//Draw points.
for (int i=0;i<trajectory.size();i++)
frame.at<Vec3b>(trajectory[i].x,trajectory[i].y)=mycolor;

// waitkey enter
int c = waitKey(10);
if( (char)c == 27 ) { exit(0); }

}
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]