diff --git a/samples/cpp/stitching_detailed.cpp b/samples/cpp/stitching_detailed.cpp index 2d6351ae11f53f9fc3b9aba5838bb14498ed04ae..8fc489e870a378682d2ad2806f6c4e24f5437c63 100644 --- a/samples/cpp/stitching_detailed.cpp +++ b/samples/cpp/stitching_detailed.cpp @@ -119,8 +119,10 @@ static void printUsage() " Blending strength from [0,100] range. The default is 5.\n" " --output \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 \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 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 {