4 #include "opencv2/core.hpp"
5 #include "opencv2/core/utility.hpp"
6 #include "opencv2/cudabgsegm.hpp"
7 #include "opencv2/cudalegacy.hpp"
8 #include "opencv2/video.hpp"
9 #include "opencv2/highgui.hpp"
13 using namespace cv::cuda;
23 int main(int argc, const char** argv)
25 cv::CommandLineParser cmd(argc, argv,
26 "{ c camera | | use camera }"
27 "{ f file | ../data/vtest.avi | input video file }"
28 "{ m method | mog | method (mog, mog2, gmg, fgd) }"
29 "{ h help | | print help message }");
31 if (cmd.has("help") || !cmd.check())
38 bool useCamera = cmd.has("camera");
39 string file = cmd.get<string>("file");
40 string method = cmd.get<string>("method");
47 cerr << "Incorrect method" << endl;
51 Method m = method == "mog" ? MOG :
52 method == "mog2" ? MOG2 :
53 method == "fgd" ? FGD_STAT :
65 cerr << "can not open camera or video file" << endl;
72 GpuMat d_frame(frame);
74 Ptr<BackgroundSubtractor> mog = cuda::createBackgroundSubtractorMOG();
75 Ptr<BackgroundSubtractor> mog2 = cuda::createBackgroundSubtractorMOG2();
76 Ptr<BackgroundSubtractor> gmg = cuda::createBackgroundSubtractorGMG(40);
77 Ptr<BackgroundSubtractor> fgd = cuda::createBackgroundSubtractorFGD();
90 mog->apply(d_frame, d_fgmask, 0.01);
94 mog2->apply(d_frame, d_fgmask);
98 gmg->apply(d_frame, d_fgmask);
102 fgd->apply(d_frame, d_fgmask);
106 namedWindow("image", WINDOW_NORMAL);
107 namedWindow("foreground mask", WINDOW_NORMAL);
108 namedWindow("foreground image", WINDOW_NORMAL);
111 namedWindow("mean background image", WINDOW_NORMAL);
119 d_frame.upload(frame);
121 int64 start = cv::getTickCount();
127 mog->apply(d_frame, d_fgmask, 0.01);
128 mog->getBackgroundImage(d_bgimg);
132 mog2->apply(d_frame, d_fgmask);
133 mog2->getBackgroundImage(d_bgimg);
137 gmg->apply(d_frame, d_fgmask);
141 fgd->apply(d_frame, d_fgmask);
142 fgd->getBackgroundImage(d_bgimg);
146 double fps = cv::getTickFrequency() / (cv::getTickCount() - start);
147 std::cout << "FPS : " << fps << std::endl;
149 d_fgimg.create(d_frame.size(), d_frame.type());
150 d_fgimg.setTo(Scalar::all(0));
151 d_frame.copyTo(d_fgimg, d_fgmask);
153 d_fgmask.download(fgmask);
154 d_fgimg.download(fgimg);
155 if (!d_bgimg.empty())
156 d_bgimg.download(bgimg);
158 imshow("image", frame);
159 imshow("foreground mask", fgmask);
160 imshow("foreground image", fgimg);
162 imshow("mean background image", bgimg);
164 char key = (char)waitKey(30);