1
0
mirror of https://github.com/opencv/opencv.git synced 2026-07-30 07:43:03 +04:00

calib: expose calibrateHandEye and calibrateRobotWorldHandEye to Python

Both functions are fully implemented and documented but were tagged
CV_EXPORTS instead of CV_EXPORTS_W, so they were unreachable from
Python (and Java/JS) bindings. They use only bindable types
(InputArrayOfArrays, OutputArray, plain enums), so this is a pure
binding-exposure fix, not a behavior change.

Adds Python regression tests for both functions using synthetic
hand-eye data that satisfies the documented AX=XB (calibrateHandEye)
and AX=ZB (calibrateRobotWorldHandEye) relations, verifying the
recovered transform matches the synthetic ground truth.

Verified locally: built opencv_python3 bindings from this branch and
confirmed cv2.calibrateHandEye / cv2.calibrateRobotWorldHandEye are
now present and both new tests pass against synthetic ground-truth
poses.
This commit is contained in:
Thebinary110
2026-07-24 05:18:18 +05:30
parent eccd1c43c4
commit 325e30db1d
2 changed files with 82 additions and 2 deletions
+2 -2
View File
@@ -1256,7 +1256,7 @@ A minimum of 2 motions with non parallel rotation axes are necessary to determin
So at least 3 different poses are required, but it is strongly recommended to use many more poses.
*/
CV_EXPORTS void calibrateHandEye( InputArrayOfArrays R_gripper2base, InputArrayOfArrays t_gripper2base,
CV_EXPORTS_W void calibrateHandEye( InputArrayOfArrays R_gripper2base, InputArrayOfArrays t_gripper2base,
InputArrayOfArrays R_target2cam, InputArrayOfArrays t_target2cam,
OutputArray R_cam2gripper, OutputArray t_cam2gripper,
HandEyeCalibrationMethod method=CALIB_HAND_EYE_TSAI );
@@ -1399,7 +1399,7 @@ This problem is also known as solving the \f$\mathbf{A}\mathbf{X}=\mathbf{Z}\mat
At least 3 measurements are required (input vectors size must be greater or equal to 3).
*/
CV_EXPORTS void calibrateRobotWorldHandEye( InputArrayOfArrays R_world2cam, InputArrayOfArrays t_world2cam,
CV_EXPORTS_W void calibrateRobotWorldHandEye( InputArrayOfArrays R_world2cam, InputArrayOfArrays t_world2cam,
InputArrayOfArrays R_base2gripper, InputArrayOfArrays t_base2gripper,
OutputArray R_base2world, OutputArray t_base2world,
OutputArray R_gripper2cam, OutputArray t_gripper2cam,