/// <summary> /// Finds lines in the input image. /// This is the output of the default parameters of the algorithm on the above shown image. /// </summary> /// <param name="image">A grayscale (CV_8UC1) input image. </param> /// <param name="lines">A vector of Vec4i or Vec4f elements specifying the beginning and ending point of a line. /// Where Vec4i/Vec4f is (x1, y1, x2, y2), point 1 is the start, point 2 - end. Returned lines are strictly oriented depending on the gradient.</param> /// <param name="width">Vector of widths of the regions, where the lines are found. E.g. Width of line.</param> /// <param name="prec">Vector of precisions with which the lines are found.</param> /// <param name="nfa">Vector containing number of false alarms in the line region, /// with precision of 10%. The bigger the value, logarithmically better the detection.</param> public virtual void Detect(InputArray image, out Vec4f[] lines, out double[] width, out double[] prec, out double[] nfa) { if (image == null) { throw new ArgumentNullException("nameof(image)"); } image.ThrowIfDisposed(); using (var linesVec = new VectorOfVec4f()) using (var widthVec = new VectorOfDouble()) using (var precVec = new VectorOfDouble()) using (var nfaVec = new VectorOfDouble()) { NativeMethods.imgproc_LineSegmentDetector_detect_vector(ptr, image.CvPtr, linesVec.CvPtr, widthVec.CvPtr, precVec.CvPtr, nfaVec.CvPtr); lines = linesVec.ToArray(); width = widthVec.ToArray(); prec = precVec.ToArray(); nfa = nfaVec.ToArray(); } GC.KeepAlive(image); }
/// <summary> /// Returns a list of all edges. /// </summary> /// <returns>Output vector.</returns> public Vec4f[] GetEdgeList() { ThrowIfDisposed(); using var vec = new VectorOfVec4f(); NativeMethods.HandleException( NativeMethods.imgproc_Subdiv2D_getEdgeList(ptr, vec.CvPtr)); GC.KeepAlive(this); return(vec.ToArray()); }
/// <summary> /// /// </summary> /// <returns></returns> public Vec4f[] GetEdgeList() { ThrowIfDisposed(); NativeMethods.imgproc_Subdiv2D_getEdgeList(ptr, out var p); GC.KeepAlive(this); using (var vec = new VectorOfVec4f(p)) { return(vec.ToArray()); } }
/// <summary> /// /// </summary> /// <returns></returns> public Vec4f[] GetEdgeList() { ThrowIfDisposed(); IntPtr p; NativeMethods.imgproc_Subdiv2D_getEdgeList(ptr, out p); using (VectorOfVec4f vec = new VectorOfVec4f(p)) { return(vec.ToArray()); } }
/// <summary> /// /// </summary> /// <returns></returns> public Vec4f[] GetEdgeList() { if (disposed) throw new ObjectDisposedException("Subdiv2D", ""); IntPtr p; NativeMethods.imgproc_Subdiv2D_getEdgeList(ptr, out p); using (VectorOfVec4f vec = new VectorOfVec4f(p)) { return vec.ToArray(); } }