diff --git a/src/OpenCvSharpExtern/calib3d.h b/src/OpenCvSharpExtern/calib3d.h index 8186074829..a1d7767ec8 100644 --- a/src/OpenCvSharpExtern/calib3d.h +++ b/src/OpenCvSharpExtern/calib3d.h @@ -204,7 +204,7 @@ CVAPI(ExceptionStatus) calib3d_solvePnP_vector(cv::Point3f *objectPoints, int ob distCoeffsMat = cv::Mat(distCoeffsLength, 1, CV_64FC1, distCoeffs); const cv::Matx cameraMatrixMat(cameraMatrix); - cv::Matx rvecMat, tvecMat; + cv::Matx rvecMat(rvec), tvecMat(tvec); cv::solvePnP(objectPointsMat, imagePointsMat, cameraMatrixMat, distCoeffsMat, rvecMat, tvecMat, useExtrinsicGuess != 0, flags); memcpy(rvec, rvecMat.val, sizeof(double) * 3); memcpy(tvec, tvecMat.val, sizeof(double) * 3); diff --git a/test/OpenCvSharp.Tests/calib3d/Calib3dTest.cs b/test/OpenCvSharp.Tests/calib3d/Calib3dTest.cs index bdbb64b982..f7c8beb36f 100644 --- a/test/OpenCvSharp.Tests/calib3d/Calib3dTest.cs +++ b/test/OpenCvSharp.Tests/calib3d/Calib3dTest.cs @@ -280,11 +280,13 @@ public void FishEyeProjectPoints() Cv2.FishEye.ProjectPoints(objectPoints, imagePoints, rVec, tVec, intrisicMat, distCoeffs, 0, jacobian); } - [Fact] - public void SolvePnPTestByArray() + [Theory] + [InlineData(false)] + [InlineData(true)] + public void SolvePnPTestByArray(bool useExtrinsicGuess) { - var rvec = new double[] { 0, 0, 0 }; - var tvec = new double[] { 0, 0, 0 }; + var rvec = new double[] { 3, 0, 0 }; + var tvec = new double[] { 0, 0, -10 }; var cameraMatrix = new double[,] { { 1, 0, 0 }, @@ -305,7 +307,7 @@ public void SolvePnPTestByArray() Cv2.ProjectPoints(objPts, rvec, tvec, cameraMatrix, dist, out var imgPts, out var jacobian); - Cv2.SolvePnP(objPts, imgPts, cameraMatrix, dist, ref rvec, ref tvec); + Cv2.SolvePnP(objPts, imgPts, cameraMatrix, dist, ref rvec, ref tvec, useExtrinsicGuess: useExtrinsicGuess); } [Fact]