1234567891011121314151617181920212223242526272829303132333435363738394041424344 |
- 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<Bgr, byte> currentColorImage)
- {
- subtractor.Update(currentColorImage);
- }
- public Image<Gray, short> getForeground(Image<Gray, short> image)
- {
- Image<Gray, short> foreground = image.Clone();
- foreground = foreground.And(subtractor.ForegroundMask.Convert<short>(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<short>(delegate(byte b) { return (b == 0) ? (short) 0 : (short) 100; });
- }
- }
- }
|