fixed #5005: stitching_detailed.cpp

This commit is contained in:
LaurentBerger 2015-11-23 21:55:59 +01:00
parent c4edd86aeb
commit bef009c9dd

View File

@ -119,8 +119,10 @@ static void printUsage()
" Blending strength from [0,100] range. The default is 5.\n" " Blending strength from [0,100] range. The default is 5.\n"
" --output <result_img>\n" " --output <result_img>\n"
" The default is 'result.jpg'.\n" " The default is 'result.jpg'.\n"
" --timelapse (as_is|crop) (range_width)\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"; " 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; float blend_strength = 5;
string result_name = "result.jpg"; string result_name = "result.jpg";
bool timelapse = false; bool timelapse = false;
int timelapse_range = 5; int range_width = -1;
static int parseCmdArgs(int argc, char** argv) static int parseCmdArgs(int argc, char** argv)
@ -326,8 +328,10 @@ static int parseCmdArgs(int argc, char** argv)
return -1; return -1;
} }
i++; i++;
}
timelapse_range = atoi(argv[i + 1]); else if (string(argv[i]) == "--rangewidth")
{
range_width = atoi(argv[i + 1]);
i++; i++;
} }
else if (string(argv[i]) == "--blend_strength") else if (string(argv[i]) == "--blend_strength")
@ -458,7 +462,7 @@ int main(int argc, char* argv[])
t = getTickCount(); t = getTickCount();
#endif #endif
vector<MatchesInfo> pairwise_matches; vector<MatchesInfo> pairwise_matches;
if (!timelapse) if (range_width==-1)
{ {
BestOf2NearestMatcher matcher(try_cuda, match_conf); BestOf2NearestMatcher matcher(try_cuda, match_conf);
matcher(features, pairwise_matches); matcher(features, pairwise_matches);
@ -466,7 +470,7 @@ int main(int argc, char* argv[])
} }
else else
{ {
BestOf2NearestRangeMatcher matcher(timelapse_range, try_cuda, match_conf); BestOf2NearestRangeMatcher matcher(range_width, try_cuda, match_conf);
matcher(features, pairwise_matches); matcher(features, pairwise_matches);
matcher.collectGarbage(); matcher.collectGarbage();
} }
@ -813,9 +817,8 @@ int main(int argc, char* argv[])
} }
blender->prepare(corners, sizes); blender->prepare(corners, sizes);
} }
else if (!timelapser) else if (!timelapser && timelapse)
{ {
CV_Assert(timelapse);
timelapser = Timelapser::createDefault(timelapse_type); timelapser = Timelapser::createDefault(timelapse_type);
timelapser->initialize(corners, sizes); timelapser->initialize(corners, sizes);
} }
@ -824,8 +827,17 @@ int main(int argc, char* argv[])
if (timelapse) if (timelapse)
{ {
timelapser->process(img_warped_s, Mat::ones(img_warped_s.size(), CV_8UC1), corners[img_idx]); timelapser->process(img_warped_s, Mat::ones(img_warped_s.size(), CV_8UC1), corners[img_idx]);
String fixedFileName;
imwrite("fixed_" + img_names[img_idx], timelapser->getDst()); 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 else
{ {