From 3e708e015c99f7374946c6cd5137509add43fb21 Mon Sep 17 00:00:00 2001 From: Pavel Rojtberg <pavel.rojtberg@igd.fraunhofer.de> Date: Tue, 24 Jan 2017 15:27:11 +0100 Subject: [PATCH] solvePnP: use CV_32F for rvec, tvec if all PnP inputs are CV_32F --- modules/calib3d/src/solvepnp.cpp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/modules/calib3d/src/solvepnp.cpp b/modules/calib3d/src/solvepnp.cpp index e205580921..1e9b8ec6e4 100644 --- a/modules/calib3d/src/solvepnp.cpp +++ b/modules/calib3d/src/solvepnp.cpp @@ -77,8 +77,14 @@ bool solvePnP( InputArray _opoints, InputArray _ipoints, } else { - _rvec.create(3, 1, CV_64F); - _tvec.create(3, 1, CV_64F); + int mtype = CV_64F; + // use CV_32F if all PnP inputs are CV_32F and outputs are empty + if (_ipoints.depth() == _cameraMatrix.depth() && _ipoints.depth() == _opoints.depth() && + _rvec.empty() && _tvec.empty()) + mtype = _opoints.depth(); + + _rvec.create(3, 1, mtype); + _tvec.create(3, 1, mtype); } rvec = _rvec.getMat(); tvec = _tvec.getMat();