Go to the documentation of this file.00001
00025 #include <string>
00026 #include <iostream>
00027 #include <algorithm>
00028 #include <opencv/highgui.h>
00029 #include "tclap/CmdLine.h"
00030 #include "mapstitch/mapstitch.h"
00031
00032 using namespace TCLAP;
00033 using namespace std;
00034 using namespace cv;
00035
00036 int main(int argc, char** argv)
00037 {
00038 bool verbose = false;
00039 string outfile = "";
00040 vector<string> infiles;
00041 float max_distance = 5.;
00042
00043 try {
00044 CmdLine cmd(
00045 "Aligns multiple scan maps and combines into a single image. "
00046 "All images given on the command line will be aligned to the first "
00047 "supplied image and their respective rotation/translation and "
00048 "transformation matrix will be returned.",
00049 ' ', "0.1");
00050
00051 ValueArg<float> maxDistanceOpt("d","maximum-distance", "maximum distance on matched points pairs for inclusion", false,
00052 5., "max-distance", cmd);
00053 SwitchArg verboseOpt("v","verbose","verbose output", cmd, false);
00054 ValueArg<string> outputFOpt("o","outfile","output filename", false,
00055 "", "string",cmd);
00056 UnlabeledMultiArg<string> multi("fileName", "input file names (first one is pivot element)", false, "file1 and file2", cmd);
00057
00058 cmd.parse( argc, argv );
00059
00060
00061 verbose = verboseOpt.getValue();
00062 infiles = multi.getValue();
00063 outfile = outputFOpt.getValue();
00064 max_distance = maxDistanceOpt.getValue();
00065
00066 } catch (ArgException &e)
00067 { cerr << "error: " << e.error() << " for arg " << e.argId() << endl;
00068 exit(-1);
00069 }
00070
00071
00072 if (infiles.size() != 2) {
00073 cerr << "error: need exactly two input files" << endl;
00074 exit(-1);
00075 }
00076
00077
00078 vector<Mat> images;
00079 for (size_t i=0; i<infiles.size(); i++) {
00080 Mat image = imread(infiles[i].c_str(), 0);
00081 if (!image.data) {
00082 cerr << "error: image " << infiles[i] << " not loadable." << endl;
00083 exit(-1);
00084 }
00085 images.push_back(image);
00086 }
00087
00088
00089 StitchedMap map(images[0],images[1], max_distance);
00090
00091
00092 if (outfile.size() != 0) {
00093 imwrite(outfile, map.get_stitch());
00094 }
00095
00096 if (outfile.size() == 0 || verbose) {
00097 cout << "rotation: " << map.rotation << endl
00098 << "translation (x,y): " << map.transx << ", " << map.transy << endl
00099 << "matrix: " << map.H << endl;
00100 }
00101
00102 if (verbose) {
00103 namedWindow("wrap"); imshow("wrap", map.get_stitch()); imwrite("stitch.pgm", map.get_stitch());
00104 namedWindow("debug"); imshow("debug", map.get_debug()); imwrite("debug.pgm", map.get_debug());
00105
00106 while ((waitKey(0)&255) != 10)
00107 ;
00108 }
00109
00110 return 0;
00111 }