From 408f93340a837764768d208bdd1de2c9f1574b77 Mon Sep 17 00:00:00 2001 From: Olexa Bilaniuk Date: Tue, 3 Mar 2015 23:12:33 -0500 Subject: [PATCH] External interface converted to use OpenCV Ptr<> smart pointer. --- modules/calib3d/src/fundam.cpp | 8 +---- modules/calib3d/src/rhorefc.cpp | 54 ++++++++++++++------------------- modules/calib3d/src/rhorefc.h | 46 +++++++++++----------------- 3 files changed, 41 insertions(+), 67 deletions(-) diff --git a/modules/calib3d/src/fundam.cpp b/modules/calib3d/src/fundam.cpp index 5ec12161d6..f5e88d7e9f 100644 --- a/modules/calib3d/src/fundam.cpp +++ b/modules/calib3d/src/fundam.cpp @@ -303,7 +303,7 @@ static bool createAndRunRHORegistrator(double confidence, * initialized, used, then finalized. */ - RHO_HEST_REFC* p = rhoRefCInit(); + Ptr p = rhoRefCInit(); /** * Optional. Ideally, the context would survive across calls to @@ -339,12 +339,6 @@ static bool createAndRunRHORegistrator(double confidence, NULL, (float*)tmpH.data); - /** - * Cleanup. - */ - - rhoRefCFini(p); - /* Convert float homography to double precision. */ tmpH.convertTo(_H, CV_64FC1); diff --git a/modules/calib3d/src/rhorefc.cpp b/modules/calib3d/src/rhorefc.cpp index 0aab9a8b75..90aa16ee9b 100644 --- a/modules/calib3d/src/rhorefc.cpp +++ b/modules/calib3d/src/rhorefc.cpp @@ -298,12 +298,13 @@ static inline void sacSub8x1 (float* Hout, * @return A pointer to the context if successful; NULL if an error occured. */ -RHO_HEST_REFC* rhoRefCInit(void){ - RHO_HEST_REFC* p = new RHO_HEST_REFC; +Ptr rhoRefCInit(void){ + Ptr p = Ptr(new RHO_HEST_REFC); - if(!p->initialize()){ - delete p; - p = NULL; + if(p){ + if(!p->initialize()){ + p = Ptr((RHO_HEST_REFC*)NULL); + } } return p; @@ -314,7 +315,7 @@ RHO_HEST_REFC* rhoRefCInit(void){ * External access to non-randomness table resize. */ -int rhoRefCEnsureCapacity(RHO_HEST_REFC* p, unsigned N, double beta){ +int rhoRefCEnsureCapacity(Ptr p, unsigned N, double beta){ return p->sacEnsureCapacity(N, beta); } @@ -323,22 +324,11 @@ int rhoRefCEnsureCapacity(RHO_HEST_REFC* p, unsigned N, double beta){ * Seeds the internal PRNG with the given seed. */ -void rhoRefCSeed(RHO_HEST_REFC* p, unsigned long long seed){ +void rhoRefCSeed(Ptr p, unsigned long long seed){ p->fastSeed((uint64_t)seed); } -/** - * External access to context destructor. - * - * @param [in] p The initialized estimator context to finalize. - */ - -void rhoRefCFini(RHO_HEST_REFC* p){ - delete p; -} - - /** * Estimates the homography using the given context, matches and parameters to * PROSAC. @@ -368,20 +358,20 @@ void rhoRefCFini(RHO_HEST_REFC* p){ * inliers for acceptance was reached; 0 otherwise. */ -unsigned rhoRefC(RHO_HEST_REFC* p, /* Homography estimation context. */ - const float* src, /* Source points */ - const float* dst, /* Destination points */ - char* inl, /* Inlier mask */ - unsigned N, /* = src.length = dst.length = inl.length */ - float maxD, /* Works: 3.0 */ - unsigned maxI, /* Works: 2000 */ - unsigned rConvg, /* Works: 2000 */ - double cfd, /* Works: 0.995 */ - unsigned minInl, /* Minimum: 4 */ - double beta, /* Works: 0.35 */ - unsigned flags, /* Works: 0 */ - const float* guessH, /* Extrinsic guess, NULL if none provided */ - float* finalH){ /* Final result. */ +unsigned rhoRefC(Ptr p, /* Homography estimation context. */ + const float* src, /* Source points */ + const float* dst, /* Destination points */ + char* inl, /* Inlier mask */ + unsigned N, /* = src.length = dst.length = inl.length */ + float maxD, /* Works: 3.0 */ + unsigned maxI, /* Works: 2000 */ + unsigned rConvg, /* Works: 2000 */ + double cfd, /* Works: 0.995 */ + unsigned minInl, /* Minimum: 4 */ + double beta, /* Works: 0.35 */ + unsigned flags, /* Works: 0 */ + const float* guessH, /* Extrinsic guess, NULL if none provided */ + float* finalH){ /* Final result. */ return p->rhoRefC(src, dst, inl, N, maxD, maxI, rConvg, cfd, minInl, beta, flags, guessH, finalH); } diff --git a/modules/calib3d/src/rhorefc.h b/modules/calib3d/src/rhorefc.h index 8ebc277ad7..bcd9fba1e6 100644 --- a/modules/calib3d/src/rhorefc.h +++ b/modules/calib3d/src/rhorefc.h @@ -50,6 +50,7 @@ /* Includes */ +#include @@ -96,7 +97,7 @@ typedef struct RHO_HEST_REFC RHO_HEST_REFC; * @return A pointer to the context if successful; NULL if an error occured. */ -RHO_HEST_REFC* rhoRefCInit(void); +Ptr rhoRefCInit(void); /** @@ -114,7 +115,7 @@ RHO_HEST_REFC* rhoRefCInit(void); * @return 0 if successful; non-zero if an error occured. */ -int rhoRefCEnsureCapacity(RHO_HEST_REFC* p, unsigned N, double beta); +int rhoRefCEnsureCapacity(Ptr p, unsigned N, double beta); @@ -129,18 +130,7 @@ int rhoRefCEnsureCapacity(RHO_HEST_REFC* p, unsigned N, double beta); * @param [in] seed The 64-bit integer seed. */ -void rhoRefCSeed(RHO_HEST_REFC* p, unsigned long long seed); - - - -/** - * Finalize the estimator context, by freeing the aligned buffers used - * internally. - * - * @param [in] p The initialized estimator context to finalize. - */ - -void rhoRefCFini(RHO_HEST_REFC* p); +void rhoRefCSeed(Ptr p, unsigned long long seed); /** @@ -250,20 +240,20 @@ void rhoRefCFini(RHO_HEST_REFC* p); * inliers for acceptance was reached; 0 otherwise. */ -unsigned rhoRefC(RHO_HEST_REFC* p, /* Homography estimation context. */ - const float* src, /* Source points */ - const float* dst, /* Destination points */ - char* inl, /* Inlier mask */ - unsigned N, /* = src.length = dst.length = inl.length */ - float maxD, /* 3.0 */ - unsigned maxI, /* 2000 */ - unsigned rConvg, /* 2000 */ - double cfd, /* 0.995 */ - unsigned minInl, /* 4 */ - double beta, /* 0.35 */ - unsigned flags, /* 0 */ - const float* guessH, /* Extrinsic guess, NULL if none provided */ - float* finalH); /* Final result. */ +unsigned rhoRefC(Ptr p, /* Homography estimation context. */ + const float* src, /* Source points */ + const float* dst, /* Destination points */ + char* inl, /* Inlier mask */ + unsigned N, /* = src.length = dst.length = inl.length */ + float maxD, /* 3.0 */ + unsigned maxI, /* 2000 */ + unsigned rConvg, /* 2000 */ + double cfd, /* 0.995 */ + unsigned minInl, /* 4 */ + double beta, /* 0.35 */ + unsigned flags, /* 0 */ + const float* guessH, /* Extrinsic guess, NULL if none provided */ + float* finalH); /* Final result. */