我遵循OpenCV教程http://opencv-python-tutroals.readthedocs.io/en/latest/py_tutorials/py_calib3d/py_calibration/py_calibration.html
我没有使用棋盘来运行它,而是从LAS文件中获得了3D点坐标。下面是我的代码:
import cv2
import numpy as np
obj_point = [(630931.35,4833642.85,157.67),(630948.03,4833662.76,73.94), (631156.3, 4833904.18, 43.89),(630873.71, 4833790, 44.85), (631381.3, 4834152.6, 79.41)]
img_point = [(1346.82,843.206),(1293.03,808.146),(1041.92, 585.168), (1150.21, 894.724), (756.993,345.904) ]
obj_point = np.array(obj_point,'float32')
img_point = np.array(img_point,'float32')
ret, mtx, dist, rvecs, tvecs = cv2.calibrateCamera(obj_point, img_point, (1125, 1725),None,None)
我得到了以下错误信息:
对于非平面校准平台,初始固有矩阵必须为函数cvCalibrateCamera2
提前感谢!
您需要使用标志CV_CALIB_USE_INTRINSIC_GUESS
检查以下代码。它可能会解决你的问题。
3dPts = 3dPts.astype('float32')
2dPts = 2dPts.astype('float32')
imgsize=(640, 480)
# This can be omitted and can be substituted with None below.
camera_matrix = cv2.initCameraMatrix2D([3dPts],[2dPts]), imgsize)
cv2.calibrateCamera([3dPts], [2dPts], imgsize, camera_matrix, None,
flags=cv2.CALIB_USE_INTRINSIC_GUESS)