Problema con el tipo Point3f en la función cv2.calibrateCamera PYTHON
Buenos días a todos!
Estoy teniendo problemas con la función de OpenCV calibrateCamera donde obtengo el siguiente error:
OpenCV(4.5.4) D:\a\opencv-python\opencv-python\opencv\modules\calib3d\src\calibration.cpp:3350: error: (-210:Formato no compatible o combinación de formatos no compatible) objectPoints debe contener un vector de vectores de puntos de tipo Point3f en la función 'cv::collectCalibrationData'
Intenté encontrar una solución, pero no pude encontrar nada en ningún lugar, excepto problemas de tipo o de longitud. Utilizo un array np.float32 tanto para objPoints como para imgPoints:
objpoints = np.array(objpoints, dtype = np.float32) imgpoints = np.array(imgpoints, dtype = np.float32) ret, mtx, dist, rvecs, tvecs = cv2.calibrateCamera(objpoints, imgpoints, imsize, None, None )
El Explorador de Variables muestra los siguientes valores para las variables utilizadas:
In: objpoints Out: array([[ 0. , 246.5, 0. ], [ 14.5, 246.5, 0. ], [ 43.5, 246.5, 0. ], ..., [174. , 0. , 0. ], [319. , 0. , 0. ], [333.5, 0. , 0. ]], dtype=float32) In: imgpoints Out: array([[1310., 1032.], [1258., 1032.], [1154., 1032.], [1206., 1032.], ..., [ 739., 134.], [ 686., 133.], [ 162., 132.], [ 110., 132.]], dtype=float32) In: imsize Out: (1080, 1440) In: len(imgpoints) Out: 440 In: len(objpoints) Out: 440
También intenté intercambiar objpoints e imgpoints en la función calibrateCamera, pero eso resultó en el mismo mensaje de error. Dado que he leído muchas soluciones para esta función en C++, quiero señalar que esta es una pregunta relacionada con Python.
¡Espero que alguien pueda ayudarme con esto! ¡Gracias de antemano!
davy.ai
Parece que el mensaje de error indica que el argumento
objectPoints
pasado a la funcióncv2.calibrateCamera()
debe contener un vector de vectores de puntos de tipoPoint3f
, lo cual no es el caso aquí.Para resolver este error, puedes intentar convertir tu matriz
objpoints
en una lista de listas de objetosPoint3f
utilizando el siguiente fragmento de código:Luego, pasa
objpoints_list
en lugar deobjpoints
a la funcióncv2.calibrateCamera()
:Esto debería resolver el error y permitirte calibrar tu cámara correctamente.