51 #include <visp3/core/vpConfig.h>
52 #include <visp3/core/vpDebug.h>
59 #if defined(VISP_HAVE_MODULE_ME) && \
60 (defined(VISP_HAVE_X11) || defined(VISP_HAVE_GTK) || defined(VISP_HAVE_GDI) || defined(VISP_HAVE_OPENCV))
62 #include <visp3/core/vpColor.h>
63 #include <visp3/core/vpImage.h>
64 #include <visp3/core/vpImagePoint.h>
65 #include <visp3/gui/vpDisplayGDI.h>
66 #include <visp3/gui/vpDisplayGTK.h>
67 #include <visp3/gui/vpDisplayOpenCV.h>
68 #include <visp3/gui/vpDisplayX.h>
69 #include <visp3/io/vpImageIo.h>
71 #include <visp3/me/vpMeLine.h>
73 #include <visp3/visual_features/vpFeatureBuilder.h>
74 #include <visp3/visual_features/vpFeatureLine.h>
76 #include <visp3/core/vpIoTools.h>
77 #include <visp3/io/vpParseArgv.h>
80 #define GETOPTARGS "cdi:h"
82 void usage(
const char *name,
const char *badparam, std::string ipath);
83 bool getOptions(
int argc,
const char **argv, std::string &ipath,
bool &click_allowed,
bool &display);
94 void usage(
const char *name,
const char *badparam, std::string ipath)
97 Tracking of a line.\n\
100 %s [-i <input image path>] [-c] [-d] [-h]\n", name);
104 -i <input image path> %s\n\
105 Set image input path.\n\
106 From this path read \"line/image.%%04d.pgm\"\n\
108 Setting the VISP_INPUT_IMAGE_PATH environment\n\
109 variable produces the same behaviour than using\n\
113 Disable the mouse click. Useful to automaze the \n\
114 execution of this program without humain intervention.\n\
117 Turn off the display.\n\
120 Print the help.\n", ipath.c_str());
123 fprintf(stdout,
"\nERROR: Bad parameter [%s]\n", badparam);
138 bool getOptions(
int argc,
const char **argv, std::string &ipath,
bool &click_allowed,
bool &display)
146 click_allowed =
false;
155 usage(argv[0], NULL, ipath);
160 usage(argv[0], optarg_, ipath);
166 if ((c == 1) || (c == -1)) {
168 usage(argv[0], NULL, ipath);
169 std::cerr <<
"ERROR: " << std::endl;
170 std::cerr <<
" Bad argument " << optarg_ << std::endl << std::endl;
177 int main(
int argc,
const char **argv)
180 std::string env_ipath;
181 std::string opt_ipath;
184 std::string filename;
185 bool opt_click_allowed =
true;
186 bool opt_display =
true;
193 if (!env_ipath.empty())
197 if (getOptions(argc, argv, opt_ipath, opt_click_allowed, opt_display) ==
false) {
202 if (!opt_ipath.empty())
207 if (!opt_ipath.empty() && !env_ipath.empty()) {
208 if (ipath != env_ipath) {
209 std::cout << std::endl <<
"WARNING: " << std::endl;
210 std::cout <<
" Since -i <visp image path=" << ipath <<
"> "
211 <<
" is different from VISP_IMAGE_PATH=" << env_ipath << std::endl
212 <<
" we skip the environment variable." << std::endl;
217 if (opt_ipath.empty() && env_ipath.empty()) {
218 usage(argv[0], NULL, ipath);
219 std::cerr << std::endl <<
"ERROR:" << std::endl;
220 std::cerr <<
" Use -i <visp image path> option or set VISP_INPUT_IMAGE_PATH " << std::endl
221 <<
" environment variable to specify the location of the " << std::endl
222 <<
" image path where test images are located." << std::endl
236 unsigned int iter = 1;
237 std::ostringstream s;
238 s.setf(std::ios::right, std::ios::adjustfield);
239 s <<
"image." << std::setw(4) << std::setfill(
'0') << iter <<
".pgm";
249 vpCTRACE <<
"Load: " << filename << std::endl;
257 std::cerr << std::endl <<
"ERROR:" << std::endl;
258 std::cerr <<
" Cannot read " << filename << std::endl;
259 std::cerr <<
" Check your -i " << ipath <<
" option " << std::endl
260 <<
" or VISP_INPUT_IMAGE_PATH environment variable." << std::endl;
265 #if defined VISP_HAVE_X11
267 #elif defined VISP_HAVE_GTK
269 #elif defined VISP_HAVE_GDI
271 #elif defined VISP_HAVE_OPENCV
277 display.init(I, 100, 100,
"Display...");
297 if (opt_display && opt_click_allowed)
312 if (opt_display && opt_click_allowed) {
313 std::cout <<
"A click to continue..." << std::endl;
316 std::cout <<
"----------------------------------------------------------" << std::endl;
322 for (iter = 1; iter < 30; iter++) {
323 std::cout <<
"----------------------------------------------------------" << std::endl;
326 s <<
"image." << std::setw(4) << std::setfill(
'0') << iter <<
".pgm";
335 std::cout <<
"Tracking on image: " << filename << std::endl;
345 if (opt_click_allowed) {
346 std::cout <<
"A click to continue..." << std::endl;
351 if (opt_display && opt_click_allowed) {
352 std::cout <<
"A click to exit..." << std::endl;
357 std::cout <<
"Catch an exception: " << e << std::endl;
367 std::cout <<
"visp_me module or X11, GTK, GDI or OpenCV display "
368 "functionalities are required..."