2015-11-04 1 views
0

J'ai un programme qui détecte des objets dans un flux vidéo en direct. Je cherche à compenser la distorsion de la caméra, j'ai utilisé l'outil de calibrage OpenCV et produit un fichier XML avec les paramètres pertinents.OpenCV appliquer la distorsion de la caméra - appliquer l'étalonnage

Cependant, je ne sais pas comment l'appliquer ensuite en utilisant la fonction undistort, je crois comprendre que cela doit être appliqué à chaque image lorsqu'elle est capturée?

void undistort(InputArray src, OutputArray dst, InputArray cameraMatrix, InputArray distCoeffs, InputArray newCameraMatrix=noArray())

Je ne parviens pas à identifier chacun de ces paramètres, ci-dessous est ma compréhension actuelle.

undistorted(currentFrame, resultsWindow, calibrationFile, notSure, notSure);

Est-ce que la fonction appelée ci-dessous:

if(captureOpen == false){ 
    img_scene = cvCaptureFromFile(videoFeed); 
    } 
    while(1) { 
    image = cvQueryFrame(img_scene); 
    undistort(); 
+0

cochez cette réponse http://stackoverflow.com/questions/19897414/understanding-opencvs-undistort-function – ikaro

Répondre

0

non déformée (currentFrame, ResultsWindow, calibrationFile, notsure, notsure);

Non, cela ne fonctionnera pas. Vous devez d'abord lire manuellement votre fichier XML et remplir les paramètres correspondants avec les données trouvées dans le fichier. Le fichier doit contenir la matrice de la caméra (recherchez les valeurs cx, cy, fx, fy) et les paramètres de distorsion (k1, k2, k3, p1, p2, etc.).

La documentation undistort pour 2.4.x est ici: http://docs.opencv.org/2.4/modules/imgproc/doc/geometric_transformations.html#undistort

Typiquement src est un Mat contenant le cadre actuel. dst une sortie Mat de la même taille qui sera remplie avec l'image non déformée. Vous devrez le convertir à votre format préféré ou l'afficher dans la fenêtre. cameraMatrix est un tapis de 3x3 que vous avez rempli avec votre caméra intrinsèques. distCoeffs est généralement un 1x4 ou 1x5 Mat contenant les coeffs de distorsion. (Notez que p1 et p2 doivent être écrits juste après k2).