using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using bbiwarg.Images; using Emgu.CV; using Emgu.CV.Structure; using Emgu.CV.VideoSurveillance; namespace bbiwarg.Preprocessing { class BackgroundSubtractor { private BackgroundSubtractorMOG subtractor; public BackgroundSubtractor() { subtractor = new BackgroundSubtractorMOG(0, 0, 0.0, 0.0); // defaults } public void update(Image currentColorImage) { subtractor.Update(currentColorImage); } public Image getForeground(Image image) { Image foreground = image.Clone(); foreground = foreground.And(subtractor.ForegroundMask.Convert(delegate(byte b) { if (b == 0) return 0; else return short.MaxValue; })); int numNonZero = 0; for (int i = 0; i < image.Width; ++i) for (int j = 0; j < image.Height; ++j) if (subtractor.ForegroundMask.Data[j, i, 0] != 0) ++numNonZero; Console.WriteLine("non zero: " + numNonZero); return subtractor.ForegroundMask.Convert(delegate(byte b) { return (b == 0) ? (short) 0 : (short) 100; }); } } }