private static void Track() { using (var video = new CvCapture("data/bach.mp4")) { IplImage frame = null; IplImage gray = null; IplImage binary = null; IplImage render = null; IplImage renderTracks = null; CvTracks tracks = new CvTracks(); CvWindow window = new CvWindow("render"); CvWindow windowTracks = new CvWindow("tracks"); for (int i = 0; ; i++) { frame = video.QueryFrame(); //if (frame == null) // frame = new IplImage("data/shapes.png"); if (gray == null) { gray = new IplImage(frame.Size, BitDepth.U8, 1); binary = new IplImage(frame.Size, BitDepth.U8, 1); render = new IplImage(frame.Size, BitDepth.U8, 3); renderTracks = new IplImage(frame.Size, BitDepth.U8, 3); } render.Zero(); renderTracks.Zero(); Cv.CvtColor(frame, gray, ColorConversion.BgrToGray); Cv.Threshold(gray, binary, 0, 255, ThresholdType.Otsu); CvBlobs blobs = new CvBlobs(binary); CvBlobs newBlobs = new CvBlobs(blobs .OrderByDescending(pair => pair.Value.Area) .Take(200) .ToDictionary(pair => pair.Key, pair => pair.Value), blobs.Labels); newBlobs.RenderBlobs(binary, render); window.ShowImage(render); newBlobs.UpdateTracks(tracks, 10.0, Int32.MaxValue); tracks.Render(binary, renderTracks); windowTracks.ShowImage(renderTracks); Cv.WaitKey(200); Console.WriteLine(i); } } }