2012-10-07 21 views
5

Estoy tratando de aprender cómo hacer la calibración de cámaras 3D y estéreo usando openCV y python. Usando 3 vistas de cámara de un tablero de ajedrez de 8x6 (7x5 esquinas interiores), pude obtener cv.calibrateCamera() funcionando bien pero estoy totalmente atascado cuando uso cv2. Uno de los pasos es encontrar las esquinas del tablero de ajedrez. Mientras que cv.findChessboardCorners() devuelve esquinas como una lista de puntos, cv2 usa matrices numpy y devuelve los puntos como una matriz numpy (35,1,2). Los parámetros para cv2.calibrateCamera() son object_points, image_points y image_size. Estoy suministrando los puntos del objeto en una matriz numpy (3,35,3) y los puntos de la imagen en una matriz numpy (3,35,2). El tamaño de la imagen es (1632, 1224). ¿Alguien puede decirme cuál es el problema? El error que consigo no es muy útil: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 

Respuesta

5

Puntos necesitan ser float32, en forma de matriz (N, 2) y (N, 3). Puede convertir a float32 de esta manera:

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

¡Gracias! ¡Este error me molestó sin fin! – shinjin

+1

Encontré esta pregunta en 2015, usando OpenCV 2.4.10. Obtengo un "cv2.error similar: ... calibration.cpp: 3169: error: (-215) ni> = 0 en la función cv :: collectCalibrationData". La solución fue remodelar ambas matrices a (1, N, 3) y (1, N, 2) para puntos de objeto e imagen, respectivamente. – sastanin