Я работаю над проектом с маркерами aruco с OpenCV и хочу сравнить некоторые параметры:
Я собираюсь ввести расстояние между маркером и камерой, например 30 см / 0,03 м, размер маркера и ориентацию.
Затем я собираюсь выполнить обнаружение маркера и оценку позы: на моем экране я вижу, что ось нарисована на маркере.
А теперь я хочу получить положение маркера, рассчитанное камерой, чтобы сравнить, одинаковое расстояние или нет.
Положение маркера, которое рассчитала камера, я думаю, есть в координатах камеры, но я хочу, чтобы они были в мировых координатах.
Когда я искал в документации OpenCV и в StackOverflow, я понял, что tvecs - это вектор перевода, поэтому положение моего маркера и rvecs - это вращение моего маркера, но оба в координатах камеры. В некоторых других темах говорится о функции Родригеса или о координатах камеры, поэтому я не думаю, что это может мне помочь, потому что я хочу сравнить расстояние, поэтому мне нужен один и тот же ориентир. Если то, что я говорю, правда, мне нужно преобразовать tvecs и rvecs, чтобы получить мировую координату моего маркера.
Небольшой шрифт, поясняющий мои результаты: (в порядке: FOUND, i, rvec [i], tvec [i]) -> i - индекс, который представляет количество обнаруженных маркеров.
FOUND
0
[1.62518, 1.07437, -0.872242]
[-0.3794, -0.0123949, 1.4374]
FOUND
0
[1.62059, 1.08047, -0.901514]
[-0.378006, -0.0120786, 1.43043]
Я помещаю маркер на расстоянии 24 см от камеры и говорю: [-0.3794, -0.0123949, 1.4374] Я думаю, это координаты камеры.
Как можно использовать результаты tvecs и rvecs, чтобы получить мировую координату и получить приблизительно 24 см для позиции и сравнить с позицией, которую я ввел?
(Я работаю с C++ и aruco в OpenCV, но если ответ на другом языке, все в порядке, я думаю, что принцип тот же)
@Micka Я не понимаю, почему ты говоришь о GPS и компасе. `cv :: aruco :: EstimationPoseSingleMarkers (corners, 0.01, cameraMatrix, distCoeffs, rvecs, tvecs)` Я выполнил оценку позы, и маркеры обнаруживаются моей камерой, а tvecs и rvecs рассчитываются камерой, и я думаю, что это так. положение моего маркера, но в координатах камеры. Мне нужно выполнить операцию для преобразования системы координат этих векторов, например: result = X * tvecs [i], например, какой X неизвестен, потому что я не знаю, какова операция для системы камеры -> мировая система
(Мировая система-> система камеры выполняется функцией оценки, я думаю)
если у вас есть внешние элементы камеры, просто игнорируйте информацию GPS / компаса и замените их известными внешними данными камеры. Если у вас нет внешних устройств камеры, вам понадобится некоторая информация о глобальной информации о вашей камере ИЛИ о вашем маркере. GPS / компас может предоставить такую информацию.
для мировых координат вам понадобится либо GPS, либо компас в вашей системе, затем просто преобразуйте точки из системы координат камеры в реальную систему координат WOTL с помощью T * p, где T - это преобразование mateix 4x4, описывающее GPS-координаты камеры (перевод) и ориентация по компасу (вращение).