Пиксельные координаты на 3D -линию (OpenCV)
-
29-09-2019 - |
Вопрос
У меня есть изображение, отображаемое на экране, которое не поддержано с помощью cvinitundistortmap & cvremap (с калибровкой камеры), и пользователь нажимает на функцию на изображении. Таким образом, у меня есть координаты пикселей (u, v) функции, и у меня также есть внутренняя матрица и матрица искажения.
Я ищу уравнение 3D-строки в камере/реальных координатах, на которых должна лежать функция, нажатая пользователь. У меня уже есть перпендикулярное расстояние между плоскостью изображения камеры и функцией, поэтому я могу объединить это с вышеупомянутым уравнением, чтобы дать мне координату этой функции (x, y, z).
Звучит легко (обратная внутренняя матрица или что-то в этом роде?) Но я не могу найти пошаговые инструкции нигде. C ++ или C# код предпочтится.
Решение
Это немного старый вопрос, но все же может быть полезным для кого -то. Все строки проходят через точку (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».