Ejemplo n.º 1
0
 public void TestHughCircle()
 {
     if (CudaInvoke.HasCuda)
     {
         Mat m = new Mat(480, 480, DepthType.Cv8U, 1);
         m.SetTo(new MCvScalar(0));
         CvInvoke.Circle(m, new Point(240, 240), 100, new MCvScalar(150), 10);
         GpuMat gm = new GpuMat();
         gm.Upload(m);
         using (CudaHoughCirclesDetector detector = new CudaHoughCirclesDetector(1, 30, 120, 30, 10, 400))
             using (GpuMat circlesGpu = new GpuMat())
                 using (Mat circlesMat = new Mat())
                 {
                     detector.Detect(gm, circlesGpu);
                     circlesGpu.Download(circlesMat);
                     CircleF[] circles       = new CircleF[circlesMat.Cols];
                     GCHandle  circlesHandle = GCHandle.Alloc(circles, GCHandleType.Pinned);
                     Emgu.CV.Util.CvToolbox.Memcpy(circlesHandle.AddrOfPinnedObject(), circlesMat.DataPointer, Marshal.SizeOf(typeof(CircleF)) * circles.Length);
                     circlesHandle.Free();
                     foreach (var circle in circles)
                     {
                         CvInvoke.Circle(m, Point.Round(circle.Center), (int)circle.Radius, new MCvScalar(255));
                     }
                 }
     }
 }
Ejemplo n.º 2
0
 public void TestCudaHoughCircle()
 {
     if (CudaInvoke.HasCuda)
     {
         Mat m = new Mat(480, 480, DepthType.Cv8U, 1);
         m.SetTo(new MCvScalar(0));
         CvInvoke.Circle(m, new Point(240, 240), 100, new MCvScalar(150), 10);
         GpuMat gm = new GpuMat();
         gm.Upload(m);
         using (CudaHoughCirclesDetector detector = new CudaHoughCirclesDetector(1, 30, 120, 30, 10, 400))
         {
             CircleF[] circles = detector.Detect(gm);
             foreach (var circle in circles)
             {
                 CvInvoke.Circle(m, Point.Round(circle.Center), (int)circle.Radius, new MCvScalar(255));
             }
         }
     }
 }