Я использую веб-камеру и использую 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); }
}
Используйте вектор, чтобы удерживать позиции, а затем нарисуйте их на каждом кадре.
Обратите внимание, что ваша функция должна вернуть обнаруженную точку. Я изменил его имя, потому что он не рисует в этот момент. Вы можете исправить это позже.
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); } }
Других решений пока нет …