/// <summary> /// Finds centers in the grid of circles. /// </summary> /// <param name="image">grid view of input circles; it must be an 8-bit grayscale or color image.</param> /// <param name="patternSize">number of circles per row and column ( patternSize = Size(points_per_row, points_per_colum) ).</param> /// <param name="centers">output array of detected centers.</param> /// <param name="flags">various operation flags that can be one of the FindCirclesGridFlag values</param> /// <param name="blobDetector">feature detector that finds blobs like dark circles on light background.</param> /// <returns></returns> public static bool FindCirclesGrid( InputArray image, Size patternSize, out Point2f[] centers, FindCirclesGridFlags flags = FindCirclesGridFlags.SymmetricGrid, FeatureDetector blobDetector = null) { if (image == null) throw new ArgumentNullException("image"); image.ThrowIfDisposed(); using (var centersVec = new VectorOfPoint2f()) { int ret = NativeMethods.calib3d_findCirclesGrid_vector( image.CvPtr, patternSize, centersVec.CvPtr, (int)flags, ToPtr(blobDetector)); centers = centersVec.ToArray(); return ret != 0; } }
/// <summary> /// Finds centers in the grid of circles. /// </summary> /// <param name="image">grid view of input circles; it must be an 8-bit grayscale or color image.</param> /// <param name="patternSize">number of circles per row and column ( patternSize = Size(points_per_row, points_per_colum) ).</param> /// <param name="centers">output array of detected centers.</param> /// <param name="flags">various operation flags that can be one of the FindCirclesGridFlag values</param> /// <param name="blobDetector">feature detector that finds blobs like dark circles on light background.</param> /// <returns></returns> public static bool FindCirclesGrid( InputArray image, Size patternSize, OutputArray centers, FindCirclesGridFlags flags = FindCirclesGridFlags.SymmetricGrid, FeatureDetector blobDetector = null) { if (image == null) throw new ArgumentNullException("image"); if (centers == null) throw new ArgumentNullException("centers"); image.ThrowIfDisposed(); centers.ThrowIfNotReady(); int ret = NativeMethods.calib3d_findCirclesGrid_InputArray( image.CvPtr, patternSize, centers.CvPtr, (int)flags, ToPtr(blobDetector)); centers.Fix(); return ret != 0; }