2013-03-09 2 views
1

Кто-нибудь знает, как найти координаты движущегося объекта? Я нашел несколько примеров в Интернете о отслеживании объектов с помощью оптического потока, но на движущихся объектах я получил только отслеживаемые точки. Можно ли просто нарисовать прямоугольник вокруг каждого движущегося объекта? Есть ли способ получить координаты каждого движущегося объекта? Оцените любую помощь заранее. Благодаря!Как найти координаты движущихся объектов для рисования прямоугольника

ответ

0

Сложно определить координаты объекта только с нескольких точек на нем. Вы можете использовать моменты (here is a tutorial) tu получить довольно стабильную точку, описывающую, где находится ваш объект.

Вы также можете выполнить дополнительную работу, например, сегментирование с использованием отслеживаемых точек, чтобы получить контур отслеживаемого объекта, что должно еще более упростить поиск его центра масс. Пошел за борт с ths.

Существует также метод отслеживания, называемый CAMSHIFT, который возвращает прямоугольник, ограничивающий отслеживаемый объект.

Если вы точно знаете, что отслеживаете, и можете следить за тем, чтобы некоторые известные точки на отслеживаемом объекте отслеживались, и вы можете их распознать, чем вы можете использовать POSIT для определения трехмерных координат и ориентации объекта. Взгляните на ArUco, чтобы понять, о чем я говорю.

Чтобы получить 3D-положение из предыдущих методов, вы можете использовать стереовидение и использовать центр масс с обеих камер для вычисления координат.

+0

Привет, спасибо за ваш ответ. Я смущен насчет связи между сегментацией и отслеживанием. Я попытался использовать вычитание фона, чтобы получить контур движущихся объектов, но как я могу их отслеживать? Должен ли я по-прежнему использовать оптический поток, но как? – user746123

+0

Я просто бросил сегментацию как бесплатное предложение. Должно быть, выкопать еще немного, чтобы увидеть, как он фактически используется. В любом случае, вы можете нарисовать вокруг них прямоугольник. Вы можете использовать центр масс или что-то еще, если вы согласны с ним, поэтому каждый объект находится одинаково. Что касается точного местоположения, вы можете использовать ['calcPyrOpticalFlowLK'] (http://docs.opencv.org/modules/video/doc/motion_analysis_and_object_tracking.html?highlight=pyrlk#calcopticalflowpyrlk), поскольку он отслеживает ранее установленные функции на сцена, вместо этого просто показывает, где находится какое-либо движение. – morynicz

1

Установить прямоугольник к точкам вы получаете с оптическим потоком, и вы можете рассмотреть центр подогнанного прямоугольника как справедливая оценку 2D траектории всего двигающегося тела ..

1

и может использовать оператор Moments

сначала рассчитать размер контура .... и просто добавить этот блок кода

Moments moment = moments((cv::Mat)contours[index]); 
      area = moment.m00;//m00 gives the area 
         x = moment.m10/area;//gives the x coordinate 
        y = moment.m01/area; //gives y coordiante 

, где контуров на выходе из findcontours(),

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