/// <summary> /// computes the distance transform map /// </summary> /// <param name="src"></param> /// <param name="dst"></param> /// <param name="distanceType"></param> /// <param name="maskSize"></param> public static void DistanceTransform(InputArray src, OutputArray dst, DistanceType distanceType, DistanceMaskSize maskSize) { if (src == null) throw new ArgumentNullException("src"); if (dst == null) throw new ArgumentNullException("dst"); src.ThrowIfDisposed(); dst.ThrowIfNotReady(); NativeMethods.imgproc_distanceTransform( src.CvPtr, dst.CvPtr, (int)distanceType, (int)maskSize); dst.Fix(); }
/// <summary> /// computes the distance transform map /// </summary> /// <param name="distanceType"></param> /// <param name="maskSize"></param> public MatOfFloat DistanceTransform(DistanceType distanceType, DistanceMaskSize maskSize) { var dst = new MatOfFloat(); Cv2.DistanceTransform(this, dst, distanceType, maskSize); return dst; }
// ReSharper restore InconsistentNaming #endregion #region DistanceTransform /// <summary> /// builds the discrete Voronoi diagram /// </summary> /// <param name="src"></param> /// <param name="dst"></param> /// <param name="labels"></param> /// <param name="distanceType"></param> /// <param name="maskSize"></param> /// <param name="labelType"></param> public static void DistanceTransformWithLabels(InputArray src, OutputArray dst, OutputArray labels, DistanceType distanceType, DistanceMaskSize maskSize, DistTransformLabelType labelType = DistTransformLabelType.CComp) { if (src == null) throw new ArgumentNullException("src"); if (dst == null) throw new ArgumentNullException("dst"); if (labels == null) throw new ArgumentNullException("labels"); src.ThrowIfDisposed(); dst.ThrowIfNotReady(); labels.ThrowIfNotReady(); NativeMethods.imgproc_distanceTransformWithLabels( src.CvPtr, dst.CvPtr, labels.CvPtr, (int)distanceType, (int)maskSize, (int)labelType); dst.Fix(); labels.Fix(); }
public static void DistanceTransform(bool negative = false, DistanceTypes distanceType = DistanceTypes.L2, DistanceMaskSize distanceMaskSize = DistanceMaskSize.Mask3) { Glb.DrawMatAndHist0(Glb.matSrc); var matThr = Glb.matSrc.CvtColor(ColorConversionCodes.BGR2GRAY).Threshold(128, 255, ThresholdTypes.Otsu); if (negative) { Cv2.BitwiseNot(matThr, matThr); } Glb.DrawMatAndHist1(matThr); var matDist = matThr.DistanceTransform(distanceType, distanceMaskSize); var x1 = matDist.Min(); var x2 = matDist.Max(); float y1 = 0; float y2 = 255; double scale = (y2 - y1) / (x2 - x1); double offset = (x2 * y1 - x1 * y2) / (x2 - x1); var matDistColor = new Mat(); matDist.ConvertTo(matDistColor, MatType.CV_8UC1, scale, offset); Glb.DrawMatAndHist2(matDistColor); matThr.Dispose(); matDist.Dispose(); matDistColor.Dispose(); }