diff --git a/modules/calib3d/src/circlesgrid.cpp b/modules/calib3d/src/circlesgrid.cpp index 93a535482a..5cf77a939d 100644 --- a/modules/calib3d/src/circlesgrid.cpp +++ b/modules/calib3d/src/circlesgrid.cpp @@ -403,15 +403,15 @@ void CirclesGridClusterFinder::parsePatternPoints(const std::vector idealPt = Point2f(j*squareSize, i*squareSize); Mat query(1, 2, CV_32F, &idealPt); - int knn = 1; - int indicesbuf = 0; - float distsbuf = 0.f; + const int knn = 1; + int indicesbuf[knn] = {0}; + float distsbuf[knn] = {0.f}; Mat indices(1, knn, CV_32S, &indicesbuf); Mat dists(1, knn, CV_32F, &distsbuf); flannIndex.knnSearch(query, indices, dists, knn, flann::SearchParams()); - centers.push_back(patternPoints.at(indicesbuf)); + centers.push_back(patternPoints.at(indicesbuf[0])); - if(distsbuf > maxRectifiedDistance) + if(distsbuf[0] > maxRectifiedDistance) { #ifdef DEBUG_CIRCLES cout << "Pattern not detected: too large rectified distance" << endl; diff --git a/modules/calib3d/src/fundam.cpp b/modules/calib3d/src/fundam.cpp index f28885acf8..587e93546a 100644 --- a/modules/calib3d/src/fundam.cpp +++ b/modules/calib3d/src/fundam.cpp @@ -131,7 +131,7 @@ public: const Point2f* m = m2.ptr(); double LtL[9][9], W[9][1], V[9][9]; - Mat _LtL( 9, 9, CV_64F, LtL ); + Mat _LtL( 9, 9, CV_64F, &LtL[0][0] ); Mat matW( 9, 1, CV_64F, W ); Mat matV( 9, 9, CV_64F, V ); Mat _H0( 3, 3, CV_64F, V[8] ); diff --git a/modules/calib3d/src/levmarq.cpp b/modules/calib3d/src/levmarq.cpp index 58b6f2b454..539c804e2b 100644 --- a/modules/calib3d/src/levmarq.cpp +++ b/modules/calib3d/src/levmarq.cpp @@ -217,7 +217,7 @@ CV_INIT_ALGORITHM(LMSolverImpl, "LMSolver", obj.info()->addParam(obj, "maxIters", obj.maxIters); obj.info()->addParam(obj, "printInterval", obj.printInterval)); -CV_EXPORTS Ptr createLMSolver(const Ptr& cb, int maxIters) +Ptr createLMSolver(const Ptr& cb, int maxIters) { CV_Assert( !LMSolverImpl_info_auto.name().empty() ); return new LMSolverImpl(cb, maxIters); diff --git a/modules/calib3d/src/precomp.hpp b/modules/calib3d/src/precomp.hpp index 7883390f4a..b1b92d261d 100644 --- a/modules/calib3d/src/precomp.hpp +++ b/modules/calib3d/src/precomp.hpp @@ -81,7 +81,7 @@ public: CV_EXPORTS Ptr createLMSolver(const Ptr& cb, int maxIters); -class PointSetRegistrator : public Algorithm +class CV_EXPORTS PointSetRegistrator : public Algorithm { public: class CV_EXPORTS Callback diff --git a/modules/calib3d/src/ptsetreg.cpp b/modules/calib3d/src/ptsetreg.cpp index 9a202d3cca..c092cba9bc 100644 --- a/modules/calib3d/src/ptsetreg.cpp +++ b/modules/calib3d/src/ptsetreg.cpp @@ -83,8 +83,6 @@ public: checkPartialSubsets = true; } - virtual ~RANSACPointSetRegistrator() {} - int findInliers( const Mat& m1, const Mat& m2, const Mat& model, Mat& err, Mat& mask, double thresh ) const { cb->computeError( m1, m2, model, err ); @@ -318,9 +316,8 @@ public: return true; } - int iter, niters = cvRound(std::log(1-confidence)/ - std::log(1-std::pow(1-outlierRatio,(double)modelPoints))); - niters = MIN( MAX(niters, 3), maxIters ); + int iter, niters = RANSACUpdateNumIters(confidence, outlierRatio, modelPoints, maxIters); + niters = MAX(niters, 3); for( iter = 0; iter < niters; iter++ ) {