From a685be3ea9cd5e1d1a6ee9fcc635960666645bd5 Mon Sep 17 00:00:00 2001 From: Ilya Lysenkov <no@email> Date: Fri, 6 May 2011 14:02:07 +0000 Subject: [PATCH] Added extra argument for BlobDetector in findCirclesGrid --- modules/calib3d/include/opencv2/calib3d/calib3d.hpp | 8 +++++--- modules/calib3d/src/calibinit.cpp | 13 +++---------- modules/python/src2/opencv_extra_api.hpp | 8 ++++++++ 3 files changed, 16 insertions(+), 13 deletions(-) diff --git a/modules/calib3d/include/opencv2/calib3d/calib3d.hpp b/modules/calib3d/include/opencv2/calib3d/calib3d.hpp index dcd9832d38..da4d5b009c 100644 --- a/modules/calib3d/include/opencv2/calib3d/calib3d.hpp +++ b/modules/calib3d/include/opencv2/calib3d/calib3d.hpp @@ -44,6 +44,7 @@ #define __OPENCV_CALIB3D_HPP__ #include "opencv2/core/core.hpp" +#include "opencv2/features2d/features2d.hpp" #ifdef __cplusplus extern "C" { @@ -527,11 +528,12 @@ CV_EXPORTS_W void drawChessboardCorners( InputOutputArray image, Size patternSiz const InputArray& corners, bool patternWasFound ); enum { CALIB_CB_SYMMETRIC_GRID = 1, CALIB_CB_ASYMMETRIC_GRID = 2, - CALIB_CB_CLUSTERING = 4, CALIB_CB_WHITE_CIRCLES = 8 }; + CALIB_CB_CLUSTERING = 4 }; //! finds circles' grid pattern of the specified size in the image -CV_EXPORTS_W bool findCirclesGrid( const InputArray& image, Size patternSize, - OutputArray centers, int flags=CALIB_CB_SYMMETRIC_GRID ); +CV_EXPORTS bool findCirclesGrid( const InputArray& image, Size patternSize, + OutputArray centers, int flags=CALIB_CB_SYMMETRIC_GRID, + const Ptr<FeatureDetector> &blobDetector = new SimpleBlobDetector()); enum { diff --git a/modules/calib3d/src/calibinit.cpp b/modules/calib3d/src/calibinit.cpp index 7200b126b2..ec09afeb96 100644 --- a/modules/calib3d/src/calibinit.cpp +++ b/modules/calib3d/src/calibinit.cpp @@ -1927,7 +1927,7 @@ void cv::drawChessboardCorners( InputOutputArray _image, Size patternSize, } bool cv::findCirclesGrid( const InputArray& _image, Size patternSize, - OutputArray _centers, int flags ) + OutputArray _centers, int flags, const Ptr<FeatureDetector> &blobDetector ) { bool isAsymmetricGrid = (flags & CALIB_CB_ASYMMETRIC_GRID); bool isSymmetricGrid = (flags & CALIB_CB_SYMMETRIC_GRID); @@ -1935,16 +1935,9 @@ bool cv::findCirclesGrid( const InputArray& _image, Size patternSize, Mat image = _image.getMat(); vector<Point2f> centers; - SimpleBlobDetector::Params params; - if(flags & CALIB_CB_WHITE_CIRCLES) - { - params.filterByColor = true; - params.blobColor = 255; - } - Ptr<SimpleBlobDetector> detector = new SimpleBlobDetector(params); - //Ptr<FeatureDetector> detector = new MserFeatureDetector(); + vector<KeyPoint> keypoints; - detector->detect(image, keypoints); + blobDetector->detect(image, keypoints); vector<Point2f> points; for (size_t i = 0; i < keypoints.size(); i++) { diff --git a/modules/python/src2/opencv_extra_api.hpp b/modules/python/src2/opencv_extra_api.hpp index 62f5efc98e..671ae71b3c 100644 --- a/modules/python/src2/opencv_extra_api.hpp +++ b/modules/python/src2/opencv_extra_api.hpp @@ -406,6 +406,14 @@ CV_WRAP static inline void convertPointsHomogeneous( const Mat& src, CV_OUT Mat& cvConvertPointsHomogeneous(&_src, &_dst); } +//! finds circles' grid pattern of the specified size in the image +CV_WRAP static inline void findCirclesGridDefault( const InputArray& image, Size patternSize, + OutputArray centers, int flags=CALIB_CB_SYMMETRIC_GRID ) +{ + findCirclesGrid(image, patternSize, centers, flags); +} + + /* //! initializes camera matrix from a few 3D points and the corresponding projections. CV_WRAP static inline Mat initCameraMatrix2D( const vector<Mat>& objectPoints, -- 2.18.0