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/768x576.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
int key = waitKey(30);