4 #include "opencv2/core.hpp"
5 #include "opencv2/core/utility.hpp"
6 #include "opencv2/cudabgsegm.hpp"
7 #include "opencv2/video.hpp"
8 #include "opencv2/highgui.hpp"
12 using namespace cv::cuda;
22 int main(int argc, const char** argv)
24 cv::CommandLineParser cmd(argc, argv,
25 "{ c camera | | use camera }"
26 "{ f file | 768x576.avi | input video file }"
27 "{ m method | mog | method (mog, mog2, gmg, fgd) }"
28 "{ h help | | print help message }");
30 if (cmd.has("help") || !cmd.check())
37 bool useCamera = cmd.has("camera");
38 string file = cmd.get<string>("file");
39 string method = cmd.get<string>("method");
46 cerr << "Incorrect method" << endl;
50 Method m = method == "mog" ? MOG :
51 method == "mog2" ? MOG2 :
52 method == "fgd" ? FGD_STAT :
64 cerr << "can not open camera or video file" << endl;
71 GpuMat d_frame(frame);
73 Ptr<BackgroundSubtractor> mog = cuda::createBackgroundSubtractorMOG();
74 Ptr<BackgroundSubtractor> mog2 = cuda::createBackgroundSubtractorMOG2();
75 Ptr<BackgroundSubtractor> gmg = cuda::createBackgroundSubtractorGMG(40);
76 Ptr<BackgroundSubtractor> fgd = cuda::createBackgroundSubtractorFGD();
89 mog->apply(d_frame, d_fgmask, 0.01);
93 mog2->apply(d_frame, d_fgmask);
97 gmg->apply(d_frame, d_fgmask);
101 fgd->apply(d_frame, d_fgmask);
105 namedWindow("image", WINDOW_NORMAL);
106 namedWindow("foreground mask", WINDOW_NORMAL);
107 namedWindow("foreground image", WINDOW_NORMAL);
110 namedWindow("mean background image", WINDOW_NORMAL);
118 d_frame.upload(frame);
120 int64 start = cv::getTickCount();
126 mog->apply(d_frame, d_fgmask, 0.01);
127 mog->getBackgroundImage(d_bgimg);
131 mog2->apply(d_frame, d_fgmask);
132 mog2->getBackgroundImage(d_bgimg);
136 gmg->apply(d_frame, d_fgmask);
140 fgd->apply(d_frame, d_fgmask);
141 fgd->getBackgroundImage(d_bgimg);
145 double fps = cv::getTickFrequency() / (cv::getTickCount() - start);
146 std::cout << "FPS : " << fps << std::endl;
148 d_fgimg.create(d_frame.size(), d_frame.type());
149 d_fgimg.setTo(Scalar::all(0));
150 d_frame.copyTo(d_fgimg, d_fgmask);
152 d_fgmask.download(fgmask);
153 d_fgimg.download(fgimg);
154 if (!d_bgimg.empty())
155 d_bgimg.download(bgimg);
157 imshow("image", frame);
158 imshow("foreground mask", fgmask);
159 imshow("foreground image", fgimg);
161 imshow("mean background image", bgimg);
163 int key = waitKey(30);