Convex Hull in CSharp: Difference between revisions

From EMGU
Jump to navigation Jump to search
m Undo revision 1271 by Sanders Dowdy (talk)
No edit summary
Line 3: Line 3:
!Component || Requirement || Detail  
!Component || Requirement || Detail  
|-
|-
|Emgu CV || Version 1.5 ||
|Emgu CV || Version 1.5+ ||
|-
|-
|Operation System || Cross Platform ||
|Operation System || Cross Platform ||
Line 9: Line 9:


== Source Code ==
== Source Code ==
=== Emgu CV 3.x ===
<div class="toccolours mw-collapsible mw-collapsed">
Click to view source code
<div class="mw-collapsible-content">
<source lang="csharp">
        #region Create some random points
        Random r = new Random();
        PointF[] pts = new PointF[200];
        for (int i = 0; i < pts.Length; i++)
        {
            pts[i] = new PointF((float)(100 + r.NextDouble() * 400), (float)(100 + r.NextDouble() * 400));
        }
        #endregion
        Mat img = new Mat(600, 600, DepthType.Cv8U, 3);
        img.SetTo(new MCvScalar(255.0, 255.0, 255.0));
        //Draw the points
        foreach (PointF p in pts)
            CvInvoke.Circle(img, Point.Round(p), 3, new MCvScalar(0.0, 0.0, 0.0));
        //Find and draw the convex hull
        Stopwatch watch = Stopwatch.StartNew();
        PointF[] hull = CvInvoke.ConvexHull(pts, true);
        watch.Stop();
        CvInvoke.Polylines(
            img,
#if NETFX_CORE
            Extensions.ConvertAll<PointF, Point>(hull, Point.Round),
#else
            Array.ConvertAll<PointF, Point>(hull, Point.Round),
#endif
            true, new MCvScalar(255.0, 0.0, 0.0));
        Emgu.CV.UI.ImageViewer.Show(img, String.Format("Convex Hull Computed in {0} milliseconds", watch.ElapsedMilliseconds));
</source>
</div>
</div>
=== Emgu CV 1.x ===
<div class="toccolours mw-collapsible mw-collapsed">
Click to view source code
<div class="mw-collapsible-content">
<source lang="csharp">
<source lang="csharp">
#region Create some random points
#region Create some random points
Line 37: Line 82:
}
}
</source>
</source>
 
</div>
</div>
== Result ==
== Result ==
[[image:ConvexHullExample.png]]
[[image:ConvexHullExample.png]]

Revision as of 21:24, 8 June 2015

System Requirement

Component Requirement Detail
Emgu CV Version 1.5+
Operation System Cross Platform

Source Code

Emgu CV 3.x

Click to view source code

         #region Create some random points
         Random r = new Random();
         PointF[] pts = new PointF[200];
         for (int i = 0; i < pts.Length; i++)
         {
            pts[i] = new PointF((float)(100 + r.NextDouble() * 400), (float)(100 + r.NextDouble() * 400));
         }
         #endregion

         Mat img = new Mat(600, 600, DepthType.Cv8U, 3);
         img.SetTo(new MCvScalar(255.0, 255.0, 255.0));
         //Draw the points 
         foreach (PointF p in pts)
            CvInvoke.Circle(img, Point.Round(p), 3, new MCvScalar(0.0, 0.0, 0.0));

         //Find and draw the convex hull

         Stopwatch watch = Stopwatch.StartNew();
         PointF[] hull = CvInvoke.ConvexHull(pts, true);
         watch.Stop();
         CvInvoke.Polylines(
            img,
#if NETFX_CORE
            Extensions.ConvertAll<PointF, Point>(hull, Point.Round),
#else
            Array.ConvertAll<PointF, Point>(hull, Point.Round),
#endif
            true, new MCvScalar(255.0, 0.0, 0.0));

         Emgu.CV.UI.ImageViewer.Show(img, String.Format("Convex Hull Computed in {0} milliseconds", watch.ElapsedMilliseconds));

Emgu CV 1.x

Click to view source code

#region Create some random points
Random r = new Random();
PointF[] pts = new PointF[200];
for (int i = 0; i < pts.Length; i++)
{
   pts[i] = new PointF((float)(100 + r.NextDouble() * 400), (float)(100 + r.NextDouble() * 400));
}
#endregion

Image<Bgr, Byte> img = new Image<Bgr, byte>(600, 600, new Bgr(255.0, 255.0, 255.0));
//Draw the points 
foreach (PointF p in pts)
   img.Draw(new CircleF(p, 3), new Bgr(0.0, 0.0, 0.0), 1);

//Find and draw the convex hull
using (MemStorage storage = new MemStorage())
{
   Stopwatch watch = Stopwatch.StartNew();
   PointF[] hull = PointCollection.ConvexHull(pts, storage, Emgu.CV.CvEnum.ORIENTATION.CV_CLOCKWISE).ToArray();
   watch.Stop();
   img.DrawPolyline(
       Array.ConvertAll<PointF, Point>(hull, Point.Round),
       true, new Bgr(255.0, 0.0, 0.0), 1);

   ImageViewer.Show(img, String.Format("Convex Hull Computed in {0} milliseconds", watch.ElapsedMilliseconds));
}

Result