public void ProcessFrame()
{
Bitmap frame = Properties.Resources.lena_color_small;
Rectangle trackedArea = new Rectangle(0, 0, 50, 50);
UnmanagedImage uframe = UnmanagedImage.FromManagedImage(frame);
// initialization
Camshift target = new Camshift(trackedArea);
target.Conservative = false;
target.Mode = CamshiftMode.RGB;
target.Smooth = false;
target.AspectRatio = 0;
target.Extract = true;
target.ProcessFrame(uframe);
var to = target.TrackingObject;
var window = target.SearchWindow;
Rectangle expected = new Rectangle(0, 0, 50, 50);
Assert.AreEqual(expected, window);
// Frame 1 - entire image
target.ProcessFrame(uframe);
to = target.TrackingObject;
window = target.SearchWindow;
Assert.AreEqual(0.9188701900796201, to.Angle, 0.001);
Assert.AreEqual((int)47.57993716803177, to.Rectangle.Width, 0.01);
Assert.AreEqual((int)57.3831709184114, to.Rectangle.Height, 0.05);
Assert.AreEqual(new Rectangle(0, 0, 52, 62), window);
Assert.IsNotNull(to.Image);
Assert.AreEqual(47, to.Image.Width);
Assert.AreEqual(54, to.Image.Height);
// Frame 1 - conservative
target = new Camshift(uframe, trackedArea);
target.Conservative = true;
target.ProcessFrame(uframe);
target.Extract = false;
to = target.TrackingObject;
window = target.SearchWindow;
Assert.AreEqual(0.0, to.Angle);
Assert.AreEqual((int)57.7234764, to.Rectangle.Width, 0.000001);
Assert.AreEqual((int)57.7234764, to.Rectangle.Height, 0.000005);
Assert.AreEqual(25, to.Center.X);
Assert.AreEqual(25, to.Center.Y);
Assert.IsNull(to.Image);
Assert.AreEqual(new Rectangle(0, 0, 63, 63), window);
}