2010-06-24 11 views
4

J'ai une image affichée à l'écran qui n'est pas déformée via cvInitUndistortMap & cvRemap (après avoir étalonné la caméra), et l'utilisateur clique sur une fonction de l'image. J'ai donc les coordonnées (u, v) des pixels de l'entité, et j'ai aussi la matrice intrinsèque et la matrice de distorsion. Ce que je cherche, c'est l'équation de la ligne 3D dans les coordonnées de l'appareil photo/monde réel sur laquelle la fonctionnalité sur laquelle l'utilisateur a cliqué doit se trouver. J'ai déjà la distance perpendiculaire entre le plan d'image de la caméra et l'entité, donc je peux combiner cela avec l'équation ci-dessus pour me donner la coordonnée (X, Y, Z) de l'entité dans l'espace.Les coordonnées du pixel vers la ligne 3D (opencv)

Semble facile (matrice intrinsèque inverse ou quelque chose?) Mais je ne trouve pas d'instructions pas à pas n'importe où. Code C++ ou C# préféré.

Répondre

4

Ceci est une question un peu ancienne, mais pourrait être utile pour quelqu'un. Toutes les lignes passent par le point (0,0,0), donc:

ligne.x0 = 0; ligne.y0 = 0; ligne.z0 = 0;

le vecteur directionnel est le suivant: ligne.A = (u/fx) - (cx/fx); ligne.B = (v/fy) - (cy/fy); ligne.C = 1;

cx, cy, fx, fy sont des paramètres de la matrice de la caméra. Les équations sont expliquées dans le livre "Learning OpenCv".

Questions connexes