51 #include <visp3/core/vpDebug.h>
52 #include <visp3/core/vpConfig.h>
59 #if defined(VISP_HAVE_MODULE_ME) && (defined (VISP_HAVE_X11) || defined(VISP_HAVE_GTK) || defined(VISP_HAVE_GDI) || defined(VISP_HAVE_OPENCV))
61 #include <visp3/core/vpImage.h>
62 #include <visp3/io/vpImageIo.h>
63 #include <visp3/core/vpImagePoint.h>
64 #include <visp3/gui/vpDisplayX.h>
65 #include <visp3/gui/vpDisplayGTK.h>
66 #include <visp3/gui/vpDisplayGDI.h>
67 #include <visp3/gui/vpDisplayOpenCV.h>
68 #include <visp3/core/vpColor.h>
70 #include <visp3/me/vpMeNurbs.h>
71 #include <visp3/io/vpParseArgv.h>
72 #include <visp3/core/vpIoTools.h>
73 #include <visp3/io/vpVideoReader.h>
76 #define GETOPTARGS "cdi:h"
78 void usage(
const char *name,
const char *badparam, std::string ipath);
79 bool getOptions(
int argc,
const char **argv, std::string &ipath,
bool &click_allowed,
bool &display);
90 void usage(
const char *name,
const char *badparam, std::string ipath)
93 Tracking of a nurbs using vpMe.\n\
96 %s [-i <input image path>] [-c] [-d] [-h]\n", name);
100 -i <input image path> %s\n\
101 Set image input path.\n\
102 From this path read images \n\
103 \"ViSP-images/ellipse-1/image.%%04d.pgm\"\n\
104 Setting the VISP_INPUT_IMAGE_PATH environment\n\
105 variable produces the same behaviour than using\n\
109 Disable the mouse click. Useful to automaze the \n\
110 execution of this program without humain intervention.\n\
113 Turn off the display.\n\
120 fprintf(stdout,
"\nERROR: Bad parameter [%s]\n", badparam);
135 bool getOptions(
int argc,
const char **argv, std::string &ipath,
bool &click_allowed,
bool &display)
142 case 'c': click_allowed =
false;
break;
143 case 'd': display =
false;
break;
144 case 'i': ipath = optarg_;
break;
145 case 'h': usage(argv[0], NULL, ipath);
return false;
break;
148 usage(argv[0], optarg_, ipath);
153 if ((c == 1) || (c == -1)) {
155 usage(argv[0], NULL, ipath);
156 std::cerr <<
"ERROR: " << std::endl;
157 std::cerr <<
" Bad argument " << optarg_ << std::endl << std::endl;
166 main(
int argc,
const char ** argv)
169 std::string env_ipath;
170 std::string opt_ipath;
172 std::string filename;
173 bool opt_click_allowed =
true;
174 bool opt_display =
true;
180 if (! env_ipath.empty())
185 if (getOptions(argc, argv, opt_ipath, opt_click_allowed, opt_display) ==
false) {
190 if (!opt_ipath.empty())
195 if (!opt_ipath.empty() && !env_ipath.empty()) {
196 if (ipath != env_ipath) {
197 std::cout << std::endl
198 <<
"WARNING: " << std::endl;
199 std::cout <<
" Since -i <visp image path=" << ipath <<
"> "
200 <<
" is different from VISP_IMAGE_PATH=" << env_ipath << std::endl
201 <<
" we skip the environment variable." << std::endl;
206 if (opt_ipath.empty() && env_ipath.empty()){
207 usage(argv[0], NULL, ipath);
208 std::cerr << std::endl
209 <<
"ERROR:" << std::endl;
210 std::cerr <<
" Use -i <visp image path> option or set VISP_INPUT_IMAGE_PATH "
212 <<
" environment variable to specify the location of the " << std::endl
213 <<
" image path where test images are located." << std::endl << std::endl;
234 #if defined VISP_HAVE_X11
236 #elif defined VISP_HAVE_GTK
238 #elif defined VISP_HAVE_GDI
240 #elif defined VISP_HAVE_OPENCV
246 display.
init(I, 100, 100,
"Display...") ;
268 if (opt_click_allowed)
270 std::cout <<
"Click on points along the edge with the left button." << std::endl;
271 std::cout <<
"Then click on the right button to continue." << std::endl;
277 std::list<vpImagePoint> list;
291 if (opt_display && opt_click_allowed) {
292 std::cout <<
"A click to continue..." << std::endl;
295 std::cout <<
"------------------------------------------------------------"<<std::endl;
297 for (
int iter = 1 ; iter < 40 ; iter++)
316 if (opt_display && opt_click_allowed) {
317 std::cout <<
"A click to exit..." << std::endl;
323 std::cout <<
"Catch an exception: " << e.
getMessage() << std::endl;
332 std::cout <<
"visp_me module or X11, GTK, GDI or OpenCV display functionalities are required..." << std::endl;
VISP_EXPORT int wait(double t0, double t)
static bool getClick(const vpImage< unsigned char > &I, bool blocking=true)
void setPointsToTrack(const int &n)
Display for windows using GDI (available on any windows 32 platform).
void setSampleStep(const double &s)
Use the X11 console to display images on unix-like OS. Thus to enable this class X11 should be instal...
Class that enables to manipulate easily a video file or a sequence of images. As it inherits from the...
error that can be emited by ViSP classes.
void init(vpImage< unsigned char > &I, int winx=-1, int winy=-1, const std::string &title="")
static const vpColor green
static void flush(const vpImage< unsigned char > &I)
static bool parse(int *argcPtr, const char **argv, vpArgvInfo *argTable, int flags)
void open(vpImage< vpRGBa > &I)
bool getFrame(vpImage< vpRGBa > &I, long frame)
void setDisplay(vpMeSite::vpMeSiteDisplayType select)
static void display(const vpImage< unsigned char > &I)
The vpDisplayOpenCV allows to display image using the OpenCV library. Thus to enable this class OpenC...
The vpDisplayGTK allows to display image using the GTK 3rd party library. Thus to enable this class G...
const char * getMessage(void) const
void setFileName(const char *filename)
void setThreshold(const double &t)
void setFirstFrameIndex(const long first_frame)
Class that defines a 2D point in an image. This class is useful for image processing and stores only ...
void setRange(const unsigned int &r)