2015-03-31 2 views
3

j'obtiens l'erreur suivante lorsque je tente de calibrer l'appareil photo à l'aide cv2.calibrateCamera:arguments d'entrée de la cv2.calibrateCamera python

rms, camera_matrix, dist_coefs, rvecs, tvecs = cv2.calibrateCamera(pts3d, pts2d, self.imgsize, None, None) 
cv2.error: /home/sarkar/opencv/opencv/modules/calib3d/src/calibration.cpp:2976: error: (-210) objectPoints should contain vector of vectors of points of type Point3f in function collectCalibrationData 

J'avais d'abord NX3 et tableau de NX2 pour pts3d et pts2d. Je puis essayé de remodeler pts3d et pts2d sous la forme suivante en tant que fonction prend des vecteurs du vecteur point3d (et de manière correspondante pts2d) en entrée:

[1 XNX 3] et [1 XNX 2]

[kxn » x 3] et [kxn » x 3], où k est une valeur aléatoire

[1 XNX 1 x 3] et [1 XNX 1 x 2]

rien ne fonctionne et il donne toujours la même erreur.

J'ai vu le code d'exemple de code de cameraclibration fourni qui fonctionne bien, et leur entrée est de [k x n x 3]. Je ne sais vraiment pas ce qui ne va pas avec ma mise en œuvre. Voici mon code pour être précis:

#data contains [n x 5] dim array which is the hstacked arrays of pts3d and pts2d correspondences I obtained elsewhere. 
    pts3d = data[:, 0:3] #first 3 column 
    pts2d = data[:, 3:5] #next 2 column.. I checked the values are coming correctly 
    pts3d = pts3d.reshape(1,-1, 3) #Here, I have experimented by resizing with different values. 
    pts2d = pts2d.reshape(1,-1, 2) 

    rms, camera_matrix, dist_coefs, rvecs, tvecs = cv2.calibrateCamera(pts3d, pts2d, self.imgsize, None, None)  

l'erreur se produit au moment de l'appel de la fonction. Ce serait bien de savoir ce qui ne va pas ici.

Répondre

5

J'ai eu le même problème et a trouvé la réponse pour elle à ce sujet: OpenCV 2.3 camera calibration

Les principales étapes sont les suivantes:

pts3d = pts3d.astype('float32') 
pts2d = pts2d.astype('float32') 

# This can be omitted and can be substituted with None below. 
camera_matrix = cv2.initCameraMatrix2D([pts3d],[pts2d]), self.imgsize) 

cv2.calibrateCamera([pts3d], [pts2d], self.imgsize, camera_matrix, None, 
        flags=cv2.CALIB_USE_INTRINSIC_GUESS) 

Il a été écrit pour OpenCV 2.3, mais cela fonctionne pour moi même avec OpenCV 3.0 (dev branche dans git) avec Python 3.3.5 (64 bits).

+0

Bien que ce lien puisse répondre à la question, il est préférable d'inclure les parties essentielles de la réponse ici et de fournir le lien pour référence. Les réponses à lien uniquement peuvent devenir invalides si la page liée change. – NathanOliver

+0

Merci pour le commentaire. J'ai ajouté les principales étapes. – Csega