GridType gridType;
};
+struct CV_EXPORTS_W_SIMPLE CirclesGridFinderParameters2 : public CirclesGridFinderParameters
+{
+ CV_WRAP CirclesGridFinderParameters2();
+
+ CV_PROP_RW float squareSize; //!< Distance between two adjacent points. Used by CALIB_CB_CLUSTERING.
+ CV_PROP_RW float maxRectifiedDistance; //!< Max deviation from predicion. Used by CALIB_CB_CLUSTERING.
+};
+
/** @brief Finds centers in the grid of circles.
@param image grid view of input circles; it must be an 8-bit grayscale or color image.
CirclesGridFinderParameters parameters);
/** @overload */
+CV_EXPORTS_W bool findCirclesGrid2( InputArray image, Size patternSize,
+ OutputArray centers, int flags,
+ const Ptr<FeatureDetector> &blobDetector,
+ CirclesGridFinderParameters2 parameters);
+
+/** @overload */
CV_EXPORTS_W bool findCirclesGrid( InputArray image, Size patternSize,
OutputArray centers, int flags = CALIB_CB_SYMMETRIC_GRID,
const Ptr<FeatureDetector> &blobDetector = SimpleBlobDetector::create());
nelems, patternWasFound );
}
-bool cv::findCirclesGrid( InputArray _image, Size patternSize,
+bool cv::findCirclesGrid( InputArray image, Size patternSize,
+ OutputArray centers, int flags,
+ const Ptr<FeatureDetector> &blobDetector,
+ CirclesGridFinderParameters parameters)
+{
+ CirclesGridFinderParameters2 parameters2;
+ *((CirclesGridFinderParameters*)¶meters2) = parameters;
+ return cv::findCirclesGrid2(image, patternSize, centers, flags, blobDetector, parameters2);
+}
+
+bool cv::findCirclesGrid2( InputArray _image, Size patternSize,
OutputArray _centers, int flags, const Ptr<FeatureDetector> &blobDetector,
- CirclesGridFinderParameters parameters)
+ CirclesGridFinderParameters2 parameters)
{
CV_INSTRUMENT_REGION()
points.push_back (keypoints[i].pt);
}
+ if(flags & CALIB_CB_ASYMMETRIC_GRID)
+ parameters.gridType = CirclesGridFinderParameters::ASYMMETRIC_GRID;
+ if(flags & CALIB_CB_SYMMETRIC_GRID)
+ parameters.gridType = CirclesGridFinderParameters::SYMMETRIC_GRID;
+
if(flags & CALIB_CB_CLUSTERING)
{
- CirclesGridClusterFinder circlesGridClusterFinder(isAsymmetricGrid);
+ CirclesGridClusterFinder circlesGridClusterFinder(parameters);
circlesGridClusterFinder.findGrid(points, patternSize, centers);
Mat(centers).copyTo(_centers);
return !centers.empty();
}
- if(flags & CALIB_CB_ASYMMETRIC_GRID)
- parameters.gridType = CirclesGridFinderParameters::ASYMMETRIC_GRID;
- if(flags & CALIB_CB_SYMMETRIC_GRID)
- parameters.gridType = CirclesGridFinderParameters::SYMMETRIC_GRID;
-
const int attempts = 2;
const size_t minHomographyPoints = 4;
Mat H;
bool cv::findCirclesGrid( InputArray _image, Size patternSize,
OutputArray _centers, int flags, const Ptr<FeatureDetector> &blobDetector)
{
- return cv::findCirclesGrid(_image, patternSize, _centers, flags, blobDetector, CirclesGridFinderParameters());
+ return cv::findCirclesGrid2(_image, patternSize, _centers, flags, blobDetector, CirclesGridFinderParameters2());
}
/* End of file. */
CirclesGridClusterFinder& operator=(const CirclesGridClusterFinder&);
CirclesGridClusterFinder(const CirclesGridClusterFinder&);
public:
- CirclesGridClusterFinder(bool _isAsymmetricGrid)
+ CirclesGridClusterFinder(const cv::CirclesGridFinderParameters2 ¶meters)
{
- isAsymmetricGrid = _isAsymmetricGrid;
- squareSize = 1.0f;
- maxRectifiedDistance = (float)(squareSize / 2.0);
+ isAsymmetricGrid = parameters.gridType == cv::CirclesGridFinderParameters::ASYMMETRIC_GRID;
+ squareSize = parameters.squareSize;
+ maxRectifiedDistance = parameters.maxRectifiedDistance;
}
void findGrid(const std::vector<cv::Point2f> &points, cv::Size patternSize, std::vector<cv::Point2f>& centers);