From 3c3e131c38e7f35b8012e92dd525b42ecacebed2 Mon Sep 17 00:00:00 2001 From: Pavel Rojtberg Date: Thu, 30 Jul 2020 21:59:15 +0200 Subject: [PATCH] Merge pull request #17977 from paroj:hervec * calib3d: calibrateHandEye - allow using Rodrigues vectors for rotation * calib3d: calibrateHandEye - test rvec representation --- modules/calib3d/src/calibration_handeye.cpp | 10 ++++++++-- modules/calib3d/test/test_calibration_hand_eye.cpp | 5 ++++- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/modules/calib3d/src/calibration_handeye.cpp b/modules/calib3d/src/calibration_handeye.cpp index 18561c7..37d4e89 100644 --- a/modules/calib3d/src/calibration_handeye.cpp +++ b/modules/calib3d/src/calibration_handeye.cpp @@ -712,7 +712,10 @@ void calibrateHandEye(InputArrayOfArrays R_gripper2base, InputArrayOfArrays t_gr { Mat m = Mat::eye(4, 4, CV_64FC1); Mat R = m(Rect(0, 0, 3, 3)); - R_gripper2base_[i].convertTo(R, CV_64F); + if(R_gripper2base_[i].size() == Size(3, 3)) + R_gripper2base_[i].convertTo(R, CV_64F); + else + Rodrigues(R_gripper2base_[i], R); Mat t = m(Rect(3, 0, 1, 3)); t_gripper2base_[i].convertTo(t, CV_64F); @@ -727,7 +730,10 @@ void calibrateHandEye(InputArrayOfArrays R_gripper2base, InputArrayOfArrays t_gr { Mat m = Mat::eye(4, 4, CV_64FC1); Mat R = m(Rect(0, 0, 3, 3)); - R_target2cam_[i].convertTo(R, CV_64F); + if(R_target2cam_[i].size() == Size(3, 3)) + R_target2cam_[i].convertTo(R, CV_64F); + else + Rodrigues(R_target2cam_[i], R); Mat t = m(Rect(3, 0, 1, 3)); t_target2cam_[i].convertTo(t, CV_64F); diff --git a/modules/calib3d/test/test_calibration_hand_eye.cpp b/modules/calib3d/test/test_calibration_hand_eye.cpp index d2cef96..848dcf0 100644 --- a/modules/calib3d/test/test_calibration_hand_eye.cpp +++ b/modules/calib3d/test/test_calibration_hand_eye.cpp @@ -317,7 +317,10 @@ void CV_CalibrateHandEyeTest::simulateData(RNG& rng, int nPoses, t_gripper2base_noise.at(2,0) += rng.gaussian(0.001); } - R_target2cam.push_back(T_target2cam(Rect(0, 0, 3, 3))); + // test rvec represenation + Mat rvec_target2cam; + cv::Rodrigues(T_target2cam(Rect(0, 0, 3, 3)), rvec_target2cam); + R_target2cam.push_back(rvec_target2cam); t_target2cam.push_back(T_target2cam(Rect(3, 0, 1, 3))); } } -- 2.7.4