es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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!

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Parece que el mensaje de error indica que el argumento objectPoints pasado a la función cv2.calibrateCamera() debe contener un vector de vectores de puntos de tipo Point3f, lo cual no es el caso aquí.

    Para resolver este error, puedes intentar convertir tu matriz objpoints en una lista de listas de objetos Point3f utilizando el siguiente fragmento de código:

    objpoints_list = []
    for points in objpoints:
        pointlist = []
        for point in points:
            pointlist.append(cv2.Point3f(point[0], point[1], point[2]))
        objpoints_list.append(pointlist)
    

    Luego, pasa objpoints_list en lugar de objpoints a la función cv2.calibrateCamera():

    ret, mtx, dist, rvecs, tvecs = cv2.calibrateCamera(objpoints_list, imgpoints, imsize, None, None)
    

    Esto debería resolver el error y permitirte calibrar tu cámara correctamente.

Comments are closed.