Let's quickly go through the code and see what's happening there. We use the Mixture of Gaussians model to create a background subtractor object. This object represents the model that will be updated as and when we encounter new frames from the webcam. We initialized two background subtraction models—BackgroundSubtractorMOG and BackgroundSubtractorMOG2. They represent two different algorithms that are used for background subtraction. The first one refers to the paper by P. KadewTraKuPong and R. Bowden, titled An Improved Adaptive Background Mixture Model for Real-time Tracking with Shadow Detection. You can check it out at http://personal.ee.surrey.ac.uk/Personal/R.Bowden/publications/avbs01/avbs01.pdf. The second one refers to the paper by Z. Zivkovic, titled Improved Adaptive Gaussian Mixture Model for Background Subtraction. You can check it out here: http://www.zoranz.net/Publications/zivkovic2004ICPR.pdf.
We start an infinite while loop and continuously read the input frames from the webcam. With each frame, we update the background model, as indicated in the following lines:
pMOG2->apply(frame, fgMaskMOG2);
The background model gets updated in these steps. Now, if a new object enters the scene and stays there, it will become part of the background model. This helps us overcome one of the biggest shortcomings of the naive background subtraction model.