我正在使用 calibrateCamera功能。
我如何使用两个标志?我想同时使用 CALIB_USE_INTRINSIC_GUESS, 和CALIB_FIX_PRINCIPAL_POINT,但我不确定语法。当我只使用第一个标志时,代码运行良好,但是当我使用以下代码使用两个标志时:
a,camMatrix, c, rvec, tvec = cv2.calibrateCamera(
[obj_points],
[img_points],
size, camera_matrix,
dist_coefs,
flags=(cv2.CALIB_USE_INTRINSIC_GUESS and cv2.CALIB_FIX_PRINCIPAL_POINT))
Run Code Online (Sandbox Code Playgroud)
我收到错误:
OpenCV 错误:cvCalibrateCamera2,文件 D:\Build\OpenCV\opencv-3.1.0\modules\calib3d\src\calibration.cpp,第 1440 行 Traceback 中的参数错误(对于非平面校准装置,必须指定初始固有矩阵) (最近一次通话):文件“C:/Bdrive/AlgoSurg intern/DLT/CamCalTrial2.py”,第 109 行,在 a,camMatrix, c, rvec, tvec = cv2.calibrateCamera([obj_points], [img_points],大小、camera_matrix、dist_coefs、flags=(cv2.CALIB_USE_INTRINSIC_GUESS and cv2.CALIB_FIX_PRINCIPAL_POINT)) cv2.error: D:\Build\OpenCV\opencv-3.1.0\modules\calib3d\src\calibration.cpp: 14 -5) 对于非平面校准装置,必须在函数 cvCalibrateCamera2 中指定初始固有矩阵
要么语法错误,要么我遗漏了什么?
你必须这样做:
a,camMatrix, c, rvec, tvec = cv2.calibrateCamera(
[obj_points],
[img_points],
size, camera_matrix,
dist_coefs,
flags=(cv2.CALIB_USE_INTRINSIC_GUESS + cv2.CALIB_FIX_PRINCIPAL_POINT))
Run Code Online (Sandbox Code Playgroud)
并且不需要在标志周围加上括号,所以这也是可以接受的:
a,camMatrix, c, rvec, tvec = cv2.calibrateCamera(
[obj_points],
[img_points],
size, camera_matrix,
dist_coefs,
flags=cv2.CALIB_USE_INTRINSIC_GUESS + cv2.CALIB_FIX_PRINCIPAL_POINT)
Run Code Online (Sandbox Code Playgroud)