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);
}