diff --git a/opencv2/gcv_calib3d/gcv_calib3d.cpp b/opencv2/gcv_calib3d/gcv_calib3d.cpp index d9dc858..19fbafb 100644 --- a/opencv2/gcv_calib3d/gcv_calib3d.cpp +++ b/opencv2/gcv_calib3d/gcv_calib3d.cpp @@ -5,16 +5,40 @@ #include "gcv_calib3d.hpp" -cv::Mat gcvInitCameraMatrix2D(VecPoint3f objPts, VecPoint2f imgPts) { +cv::Mat GcvInitCameraMatrix2D(VecPoint3f objPts, VecPoint2f imgPts) { cv::Mat cameraMatrix; - std::vector *objPtsArr = new std::vector(); - std::vector *imgPtsArr = new std::vector(); + std::vector objPtsArr; + std::vector imgPtsArr; - objPtsArr->push_back(objPts); - imgPtsArr->push_back(imgPts); + objPtsArr.push_back(objPts); + imgPtsArr.push_back(imgPts); - cameraMatrix = cv::initCameraMatrix2D(*objPtsArr, *imgPtsArr, cv::Size(1920, 1080), 1); - std::cout << cameraMatrix << std::endl; + cameraMatrix = cv::initCameraMatrix2D(objPtsArr, imgPtsArr, cv::Size(1920, 1080), 1); return cameraMatrix; } + +double GcvCalibrateCamera(VecPoint3f objPts, VecPoint2f imgPts, + std::vector imgSize, cv::Mat cameraMatrix) { + std::vector objPtsArr; + std::vector imgPtsArr; + std::vector rvecs, tvecs; + cv::Mat distCoeffs; + + double rtn; + + objPtsArr.push_back(objPts); + imgPtsArr.push_back(imgPts); + + std::cout << "init Camera" << cameraMatrix << std::endl; + + rtn = cv::calibrateCamera(objPtsArr, imgPtsArr, + cv::Size2i(imgSize[0], imgSize[1]), + cameraMatrix, distCoeffs, rvecs, tvecs); + + std::cout << "final Camera" << cameraMatrix << std::endl; + std::cout << "final rvecs" << rvecs[0] << std::endl; + std::cout << "final tvecs" << tvecs[0] << std::endl; + + return rtn; +} diff --git a/opencv2/gcv_calib3d/gcv_calib3d.hpp b/opencv2/gcv_calib3d/gcv_calib3d.hpp index 9f88a00..15d2295 100644 --- a/opencv2/gcv_calib3d/gcv_calib3d.hpp +++ b/opencv2/gcv_calib3d/gcv_calib3d.hpp @@ -5,4 +5,7 @@ typedef std::vector VecPoint3f; typedef std::vector VecPoint2f; -cv::Mat gcvInitCameraMatrix2D(VecPoint3f objPts, VecPoint2f imgPts); +cv::Mat GcvInitCameraMatrix2D(VecPoint3f objPts, VecPoint2f imgPts); + +double GcvCalibrateCamera(VecPoint3f objPts, VecPoint2f imgPts, + std::vector imgSize, cv::Mat cameraMatrix); diff --git a/opencv2/gcv_calib3d/gcv_calib3d_test.go b/opencv2/gcv_calib3d/gcv_calib3d_test.go index 23d8b36..abd3e94 100644 --- a/opencv2/gcv_calib3d/gcv_calib3d_test.go +++ b/opencv2/gcv_calib3d/gcv_calib3d_test.go @@ -32,3 +32,25 @@ func TestGcvInitCameraMatrix2D(t *testing.T) { GcvInitCameraMatrix2D(objPts, imgPts) } + +func TestGcvCalibrateCamera(t *testing.T) { + objPts := gcv_utils.NewGcvPoint3fVector(int64(4)) + objPts.Set(0, gcv_utils.GetPoint3f(0, 25, 0)) + objPts.Set(1, gcv_utils.GetPoint3f(0, -25, 0)) + objPts.Set(2, gcv_utils.GetPoint3f(-47, 25, 0)) + objPts.Set(3, gcv_utils.GetPoint3f(-47, -25, 0)) + + imgPts := gcv_utils.NewGcvPoint2fVector(int64(4)) + imgPts.Set(0, gcv_utils.GetPoint2f(1136.4140625, 1041.89208984)) + imgPts.Set(1, gcv_utils.GetPoint2f(1845.33190918, 671.39581299)) + imgPts.Set(2, gcv_utils.GetPoint2f(302.73373413, 634.79998779)) + imgPts.Set(3, gcv_utils.GetPoint2f(1051.46154785, 352.76107788)) + + imgSize := gcv_utils.NewGcvIntVector(int64(2)) + imgSize.Set(0, 1920) + imgSize.Set(1, 1080) + + camMat := GcvInitCameraMatrix2D(objPts, imgPts) + + GcvCalibrateCamera(objPts, imgPts, imgSize, camMat) +} diff --git a/opencv2/gcv_utils/gcv_utils.swigcxx b/opencv2/gcv_utils/gcv_utils.swigcxx index 4cbba2e..abfbf7f 100644 --- a/opencv2/gcv_utils/gcv_utils.swigcxx +++ b/opencv2/gcv_utils/gcv_utils.swigcxx @@ -10,4 +10,7 @@ namespace std { %template(GcvPoint3fVector) vector; %template(GcvPoint2fVector) vector; + + %template(GcvIntVector) vector; + %template(GcvFloatVector) vector; };