added GMG_GPU to bgfg_segm sample
authorVladislav Vinogradov <vlad.vinogradov@itseez.com>
Thu, 9 Aug 2012 08:59:18 +0000 (12:59 +0400)
committerVladislav Vinogradov <vlad.vinogradov@itseez.com>
Thu, 9 Aug 2012 08:59:18 +0000 (12:59 +0400)
samples/gpu/bgfg_segm.cpp

index 839b0a9..7c5e148 100644 (file)
@@ -14,7 +14,8 @@ enum Method
     FGD_STAT,
     MOG,
     MOG2,
-    VIBE
+    VIBE,
+    GMG
 };
 
 int main(int argc, const char** argv)
@@ -22,7 +23,7 @@ int main(int argc, const char** argv)
     cv::CommandLineParser cmd(argc, argv,
         "{ c | camera | false       | use camera }"
         "{ f | file   | 768x576.avi | input video file }"
-        "{ m | method | mog         | method (fgd_stat, mog, mog2, vibe) }"
+        "{ m | method | mog         | method (fgd, mog, mog2, vibe, gmg) }"
         "{ h | help   | false       | print help message }");
 
     if (cmd.get<bool>("help"))
@@ -37,13 +38,13 @@ int main(int argc, const char** argv)
     string file = cmd.get<string>("file");
     string method = cmd.get<string>("method");
 
-    if (method != "fgd_stat" && method != "mog" && method != "mog2" && method != "vibe")
+    if (method != "fgd" && method != "mog" && method != "mog2" && method != "vibe" && method != "gmg")
     {
         cerr << "Incorrect method" << endl;
         return -1;
     }
 
-    Method m = method == "fgd_stat" ? FGD_STAT : method == "mog" ? MOG : method == "mog2" ? MOG2 : VIBE;
+    Method m = method == "fgd" ? FGD_STAT : method == "mog" ? MOG : method == "mog2" ? MOG2 : method == "vibe" ? VIBE : GMG;
 
     VideoCapture cap;
 
@@ -67,6 +68,8 @@ int main(int argc, const char** argv)
     MOG_GPU mog;
     MOG2_GPU mog2;
     VIBE_GPU vibe;
+    GMG_GPU gmg;
+    gmg.numInitializationFrames = 40;
 
     GpuMat d_fgmask;
     GpuMat d_fgimg;
@@ -93,12 +96,16 @@ int main(int argc, const char** argv)
     case VIBE:
         vibe.initialize(d_frame);
         break;
+
+    case GMG:
+        gmg.initialize(d_frame.size());
+        break;
     }
 
     namedWindow("image", WINDOW_NORMAL);
     namedWindow("foreground mask", WINDOW_NORMAL);
     namedWindow("foreground image", WINDOW_NORMAL);
-    if (m != VIBE)
+    if (m != VIBE && m != GMG)
         namedWindow("mean background image", WINDOW_NORMAL);
 
     for(;;)
@@ -108,6 +115,8 @@ int main(int argc, const char** argv)
             break;
         d_frame.upload(frame);
 
+        int64 start = cv::getTickCount();
+
         //update the model
         switch (m)
         {
@@ -130,8 +139,15 @@ int main(int argc, const char** argv)
         case VIBE:
             vibe(d_frame, d_fgmask);
             break;
+
+        case GMG:
+            gmg(d_frame, d_fgmask);
+            break;
         }
 
+        double fps = cv::getTickFrequency() / (cv::getTickCount() - start);
+        std::cout << "FPS : " << fps << std::endl;
+
         d_fgimg.setTo(Scalar::all(0));
         d_frame.copyTo(d_fgimg, d_fgmask);