def __calibrate_intrinsics(camera, image_points, object_points, flags, criteria):
"""
Calibrate intrinsics of the provided camera using provided image & object points & calibration flags & criteria.
@param camera: camera to calibrate
@param image_points: points in images taken with the camera that correspond to the 3d object_points.
@param object_points: 3d points on the object that appears in *each* of the images.
Usually, inner corners of a calibration board. Note: assumes *the same* object appears in all of the images.
@param flags: OpenCV camera calibration flags. For details, see OpenCV calib3d documentation, calibrate function.
@param criteria: OpenCV criteria.
@return: estimated object-space rotation & translation vectors of the camera (assuming object is static)
"""
# OpenCV prefers [width x height] as "Size" to [height x width]
frame_dims = (camera.intrinsics.resolution[1], camera.intrinsics.resolution[0])
start = time.time()
camera.intrinsics.error, camera.intrinsics.intrinsic_mat, camera.intrinsics.distortion_coeffs, \
rotation_vectors, translation_vectors = \
cv2.calibrateCamera(objectPoints=np.array([object_points]*len(image_points)), imagePoints=image_points,
imageSize=frame_dims, cameraMatrix=camera.intrinsics.intrinsic_mat,
distCoeffs=camera.intrinsics.distortion_coeffs,
flags=flags, criteria=criteria)
end = time.time()
camera.intrinsics.time = end - start
camera.intrinsics.timestamp = end
camera.intrinsics.calibration_image_count = len(image_points)
return rotation_vectors, translation_vectors
评论列表
文章目录