public SquaredDistanceTo ( Point anotherPoint ) : float | ||
anotherPoint | Point | Point to calculate distance to. |
return | float |
public Bitmap ProcessFrame(Bitmap frame) { var filter = new EuclideanColorFiltering(); filter.CenterColor = _color; filter.Radius = 20; filter.ApplyInPlace(frame); //var filter = new Grayscale(0.2125, 0.7154, 0.0721); //var thresh = new Threshold(thresh_val); //frame = filter.Apply(frame); //thresh.ApplyInPlace(frame); bc.ProcessImage(frame); Rectangle[] rects = bc.GetObjectsRectangles(); if (rects.Length > 0) { AForge.Point closest = new AForge.Point(100000, 100000); foreach (var r in rects) { var p = new AForge.Point(r.Left + r.Width / 2, r.Top + r.Height / 2); var d2 = center.SquaredDistanceTo(closest); var d1 = center.SquaredDistanceTo(p); if (d1 < d2) { closest = p; } } var closestDistance = center.SquaredDistanceTo(closest); var shouldFire = closestDistance < 20; var delta = closest - center; _controller.Update(delta.X, delta.Y, shouldFire); var g = Graphics.FromImage(frame); using (Pen p = new Pen(Color.Red)) { foreach (Rectangle r in rects) { g.DrawRectangle(p, r); g.DrawString("+", new Font("Consolas", 10), Brushes.Red, r.X, r.Y); } } using (Pen p = new Pen(Color.Green)) { g.DrawRectangle(p, closest.X - 2, closest.Y - 2, 5, 5); } } return(frame); }