fixed warnings
[profile/ivi/opencv.git] / samples / cpp / bgfg_gmg.cpp
1 /*
2  * FGBGTest.cpp
3  *
4  *  Created on: May 7, 2012
5  *      Author: Andrew B. Godbehere
6  */
7
8 #include "opencv2/video.hpp"
9 #include "opencv2/videoio.hpp"
10 #include "opencv2/highgui.hpp"
11 #include <opencv2/core/utility.hpp>
12 #include <iostream>
13
14 using namespace cv;
15
16 static void help()
17 {
18     std::cout <<
19     "\nA program demonstrating the use and capabilities of a particular BackgroundSubtraction\n"
20     "algorithm described in A. Godbehere, A. Matsukawa, K. Goldberg, \n"
21     "\"Visual Tracking of Human Visitors under Variable-Lighting Conditions for a Responsive\n"
22     "Audio Art Installation\", American Control Conference, 2012, used in an interactive\n"
23     "installation at the Contemporary Jewish Museum in San Francisco, CA from March 31 through\n"
24     "July 31, 2011.\n"
25     "Call:\n"
26     "./BackgroundSubtractorGMG_sample\n"
27     "Using OpenCV version " << CV_VERSION << "\n"<<std::endl;
28 }
29
30 int main(int argc, char** argv)
31 {
32     help();
33
34     initModule_video();
35     setUseOptimized(true);
36     setNumThreads(8);
37
38     Ptr<BackgroundSubtractor> fgbg = createBackgroundSubtractorGMG(20, 0.7);
39     if (!fgbg)
40     {
41         std::cerr << "Failed to create BackgroundSubtractor.GMG Algorithm." << std::endl;
42         return -1;
43     }
44
45     VideoCapture cap;
46     if (argc > 1)
47         cap.open(argv[1]);
48     else
49         cap.open(0);
50
51     if (!cap.isOpened())
52     {
53         std::cerr << "Cannot read video. Try moving video file to sample directory." << std::endl;
54         return -1;
55     }
56
57     Mat frame, fgmask, segm;
58
59     namedWindow("FG Segmentation", WINDOW_NORMAL);
60
61     for (;;)
62     {
63         cap >> frame;
64
65         if (frame.empty())
66             break;
67
68         fgbg->apply(frame, fgmask);
69
70         frame.convertTo(segm, CV_8U, 0.5);
71         add(frame, Scalar(100, 100, 0), segm, fgmask);
72
73         imshow("FG Segmentation", segm);
74
75         int c = waitKey(30);
76         if (c == 'q' || c == 'Q' || (c & 255) == 27)
77             break;
78     }
79
80     return 0;
81 }