fixed #5005: stitching_detailed.cpp
authorLaurentBerger <laurent.berger@univ-lemans.fr>
Mon, 23 Nov 2015 20:55:59 +0000 (21:55 +0100)
committerLaurentBerger <laurent.berger@univ-lemans.fr>
Mon, 23 Nov 2015 20:55:59 +0000 (21:55 +0100)
samples/cpp/stitching_detailed.cpp

index 2d6351a..8fc489e 100644 (file)
@@ -119,8 +119,10 @@ static void printUsage()
         "      Blending strength from [0,100] range. The default is 5.\n"
         "  --output <result_img>\n"
         "      The default is 'result.jpg'.\n"
-        "  --timelapse (as_is|crop) (range_width)\n"
-        "      Output warped images separately as frames of a time lapse movie, with 'fixed_' prepended to input file names.\n";
+        "  --timelapse (as_is|crop) \n"
+        "      Output warped images separately as frames of a time lapse movie, with 'fixed_' prepended to input file names.\n"
+        "  --rangewidth <int>\n"
+        "      uses range_width to limit number of images to match with.\n";
 }
 
 
@@ -148,7 +150,7 @@ int timelapse_type = Timelapser::AS_IS;
 float blend_strength = 5;
 string result_name = "result.jpg";
 bool timelapse = false;
-int timelapse_range = 5;
+int range_width = -1;
 
 
 static int parseCmdArgs(int argc, char** argv)
@@ -326,8 +328,10 @@ static int parseCmdArgs(int argc, char** argv)
                 return -1;
             }
             i++;
-
-            timelapse_range = atoi(argv[i + 1]);
+        }
+        else if (string(argv[i]) == "--rangewidth")
+        {
+            range_width = atoi(argv[i + 1]);
             i++;
         }
         else if (string(argv[i]) == "--blend_strength")
@@ -458,7 +462,7 @@ int main(int argc, char* argv[])
     t = getTickCount();
 #endif
     vector<MatchesInfo> pairwise_matches;
-    if (!timelapse)
+    if (range_width==-1)
     {
         BestOf2NearestMatcher matcher(try_cuda, match_conf);
         matcher(features, pairwise_matches);
@@ -466,7 +470,7 @@ int main(int argc, char* argv[])
     }
     else
     {
-        BestOf2NearestRangeMatcher matcher(timelapse_range, try_cuda, match_conf);
+        BestOf2NearestRangeMatcher matcher(range_width, try_cuda, match_conf);
         matcher(features, pairwise_matches);
         matcher.collectGarbage();
     }
@@ -813,9 +817,8 @@ int main(int argc, char* argv[])
             }
             blender->prepare(corners, sizes);
         }
-        else if (!timelapser)
+        else if (!timelapser && timelapse)
         {
-            CV_Assert(timelapse);
             timelapser = Timelapser::createDefault(timelapse_type);
             timelapser->initialize(corners, sizes);
         }
@@ -824,8 +827,17 @@ int main(int argc, char* argv[])
         if (timelapse)
         {
             timelapser->process(img_warped_s, Mat::ones(img_warped_s.size(), CV_8UC1), corners[img_idx]);
-
-            imwrite("fixed_" + img_names[img_idx], timelapser->getDst());
+            String fixedFileName;
+            size_t pos_s = String(img_names[img_idx]).find_last_of("/\\");
+            if (pos_s == String::npos)
+            {
+                fixedFileName = "fixed_" + img_names[img_idx];
+            }
+            else
+            {
+                fixedFileName = "fixed_" + String(img_names[img_idx]).substr(pos_s + 1, String(img_names[img_idx]).length() - pos_s);
+            }
+            imwrite(fixedFileName, timelapser->getDst());
         }
         else
         {