2012-10-07 14 views
5

Sto cercando di imparare come eseguire la calibrazione 3D e stereo della fotocamera usando openCV e python. Usando 3 viste di una scacchiera 8x6 (7x5 angoli interni), sono riuscito a far funzionare OK cv.calibrateCamera() ma sono completamente bloccato quando uso cv2. Uno dei passaggi è trovare gli angoli della scacchiera. Mentre cv.findChessboardCorners() restituisce gli angoli come un elenco di punti, cv2 utilizza gli array numpy e restituisce i punti come una matrice numerica (35,1,2). I parametri per cv2.calibrateCamera() sono object_points, image_points e image_size. Fornisco i punti oggetto in una matrice numpy (3,35,3) e i punti immagine in una matrice numpy (3,35,2). La dimensione dell'immagine è (1632, 1224). Qualcuno può dirmi qual è il problema? L'errore che ottengo non è molto utile:cv2.cameraCalibration using python

Traceback (most recent call last): 
    File "H:/pyCV/locv_book/ch11/calCamera2a.py", line 46, in <module> 
    cv2.calibrateCamera(opts,ipts,size) 
error: ..\..\..\src\opencv\modules\calib3d\src\calibration.cpp:3173: error: (-215) ni >= 0 

risposta

5

punti devono essere float32, sotto forma di matrice (N, 2) e (N, 3). È possibile convertire in float32 in questo modo:

points32 = np.array(points,dtype=np.float32) 
+0

Grazie! Questo errore mi ha infastidito fino alla fine! – shinjin

+1

Trovato questa domanda nel 2015, usando OpenCV 2.4.10. Ottengo un simile "cv2.error: ... calibration.cpp: 3169: error: (-215) ni> = 0 nella funzione cv :: collectCalibrationData". La soluzione era di rimodellare entrambi gli array a (1, N, 3) e (1, N, 2) rispettivamente per i punti oggetto e immagine. – sastanin

Problemi correlati