55 #include <visp/vpDebug.h>
56 #include <visp/vpConfig.h>
63 #if (defined (VISP_HAVE_X11) || defined(VISP_HAVE_GTK) || defined(VISP_HAVE_GDI))
65 #include <visp/vpImage.h>
66 #include <visp/vpImageIo.h>
67 #include <visp/vpImagePoint.h>
68 #include <visp/vpDisplayX.h>
69 #include <visp/vpDisplayGTK.h>
70 #include <visp/vpDisplayGDI.h>
71 #include <visp/vpColor.h>
73 #include <visp/vpMeNurbs.h>
74 #include <visp/vpParseArgv.h>
75 #include <visp/vpIoTools.h>
76 #include <visp/vpVideoReader.h>
79 #define GETOPTARGS "cdi:h"
81 void usage(
const char *name,
const char *badparam, std::string ipath);
82 bool getOptions(
int argc,
const char **argv, std::string &ipath,
bool &click_allowed,
bool &display);
93 void usage(
const char *name,
const char *badparam, std::string ipath)
96 Tracking of a nurbs using vpMe.\n\
99 %s [-i <input image path>] [-c] [-d] [-h]\n", name);
103 -i <input image path> %s\n\
104 Set image input path.\n\
105 From this path read images \n\
106 \"ViSP-images/ellipse-1/image.%%04d.pgm\"\n\
107 Setting the VISP_INPUT_IMAGE_PATH environment\n\
108 variable produces the same behaviour than using\n\
112 Disable the mouse click. Useful to automaze the \n\
113 execution of this program without humain intervention.\n\
116 Turn off the display.\n\
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)
145 case 'c': click_allowed =
false;
break;
146 case 'd': display =
false;
break;
147 case 'i': ipath = optarg_;
break;
148 case 'h': usage(argv[0], NULL, ipath);
return false;
break;
151 usage(argv[0], optarg_, ipath);
156 if ((c == 1) || (c == -1)) {
158 usage(argv[0], NULL, ipath);
159 std::cerr <<
"ERROR: " << std::endl;
160 std::cerr <<
" Bad argument " << optarg_ << std::endl << std::endl;
169 main(
int argc,
const char ** argv)
172 std::string env_ipath;
173 std::string opt_ipath;
175 std::string filename;
176 bool opt_click_allowed =
true;
177 bool opt_display =
true;
180 char *ptenv = getenv(
"VISP_INPUT_IMAGE_PATH");
185 if (! env_ipath.empty())
190 if (getOptions(argc, argv, opt_ipath, opt_click_allowed, opt_display) ==
false) {
195 if (!opt_ipath.empty())
200 if (!opt_ipath.empty() && !env_ipath.empty()) {
201 if (ipath != env_ipath) {
202 std::cout << std::endl
203 <<
"WARNING: " << std::endl;
204 std::cout <<
" Since -i <visp image path=" << ipath <<
"> "
205 <<
" is different from VISP_IMAGE_PATH=" << env_ipath << std::endl
206 <<
" we skip the environment variable." << std::endl;
211 if (opt_ipath.empty() && env_ipath.empty()){
212 usage(argv[0], NULL, ipath);
213 std::cerr << std::endl
214 <<
"ERROR:" << std::endl;
215 std::cerr <<
" Use -i <visp image path> option or set VISP_INPUT_IMAGE_PATH "
217 <<
" environment variable to specify the location of the " << std::endl
218 <<
" image path where test images are located." << std::endl << std::endl;
229 filename = ipath +
vpIoTools::path(
"/ViSP-images/ellipse-1/image.%04d.pgm");
239 #if defined VISP_HAVE_X11
241 #elif defined VISP_HAVE_GTK
243 #elif defined VISP_HAVE_GDI
249 display.
init(I, 100, 100,
"Display...") ;
272 if (opt_click_allowed)
274 std::cout <<
"Click on points along the edge with the left button." << std::endl;
275 std::cout <<
"Then click on the right button to continue." << std::endl;
281 std::list<vpImagePoint> list;
296 if (opt_display && opt_click_allowed) {
297 std::cout <<
"A click to continue..." << std::endl;
300 std::cout <<
"------------------------------------------------------------"<<std::endl;
303 for (
int iter = 1 ; iter < 40 ; iter++)
322 if (opt_display && opt_click_allowed) {
323 std::cout <<
"A click to exit..." << std::endl;
329 std::cout <<
"Catch an exception: " << e << std::endl;
337 vpERROR_TRACE(
"You do not have X11, GTK or GDI display functionalities...");
void setPointsToTrack(const int &n)
Display for windows using GDI (available on any windows 32 platform).
void setSampleStep(const double &s)
Define the X11 console to display images.
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.
Contains predetermined masks for sites and holds moving edges tracking parameters.
static int wait(double t0, double t)
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 vpDisplayGTK allows to display image using the GTK+ library version 1.2.
void setFileName(const char *filename)
void init(vpImage< unsigned char > &I, int winx=-1, int winy=-1, const char *title=NULL)
void setThreshold(const double &t)
void setFirstFrameIndex(const long first_frame)
virtual bool getClick(bool blocking=true)=0
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)