las coordenadas del pixel a la línea 3D (OpenCV)
-
29-09-2019 - |
Pregunta
Tengo una imagen visualizada en pantalla que no está distorsionada a través de cvInitUndistortMap y cvRemap (con calibración de la cámara hacerlo), y el usuario hace clic en una característica en la imagen. Así que tengo los (u, v) las coordenadas de píxel de la función, y también tengo la matriz intrínseca y la matriz de distorsión.
Lo que estoy buscando es la ecuación de la recta en coordenadas 3D de la cámara / del mundo real en el que la característica hizo clic el usuario debe encontrarse. Ya tengo la distancia perpendicular entre el plano de imagen de la cámara y la función, por lo que puedo combinar eso con la ecuación antes mencionada a mí dar el (X, Y, Z) de coordenadas de la característica en el espacio.
Sonidos fácil (matriz inversa intrínseca o algo?), Pero no puedo encontrar instrucciones paso a paso en cualquier lugar. C ++ o C # código preferido.
Solución
Esta es una vieja pregunta poco, pero aún podría ser útil para alguien. Todas las líneas pasan por el punto (0,0,0), por lo que:
line.x0 = 0; line.y0 = 0; line.z0 = 0;
vector de dirección es la siguiente: line.A = (u / fx) - (CX / fx); line.B = (v / fy) - (cy / fy); line.C = 1;
cx, cy, fx, fy son parámetros de matriz de cámara. Las ecuaciones se explican en el libro "Learning OPENCV".