Пиксельные координаты в 3D линию (opencv) - PullRequest
4 голосов
/ 24 июня 2010

У меня есть изображение, отображаемое на экране, которое не искажается с помощью cvInitUndistortMap & cvRemap (после калибровки камеры), и пользователь нажимает на функцию на изображении. Итак, у меня есть (u, v) пиксельные координаты объекта, а также у меня есть собственная матрица и матрица искажений.

То, что я ищу, - это уравнение трехмерной линии в координатах камеры / реального мира, на которой должна лежать функция, на которую нажал пользователь. У меня уже есть перпендикулярное расстояние между плоскостью изображения камеры и объектом, поэтому я могу комбинировать его с вышеупомянутым уравнением, чтобы получить координату (X, Y, Z) объекта в пространстве.

Звучит просто (обратная внутренняя матрица или что-то в этом роде?), Но я нигде не могу найти пошаговые инструкции. Код C ++ или C # предпочтителен.

1 Ответ

5 голосов
/ 15 апреля 2011

Это немного старый вопрос, но все же может быть полезным для кого-то. Все линии проходят через точку (0,0,0), поэтому:

line.x0 = 0; line.y0 = 0; line.z0 = 0;

Вектор направления

выглядит следующим образом: line.A = (u / fx) - (cx / fx); line.B = (v / fy) - (cy / fy); line.C = 1;

cx, cy, fx, fy - параметры матрицы камеры. Уравнения объясняются в книге «Изучение OpenCv».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...