54 #include <visp/vpDebug.h>
55 #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/vpMeEllipse.h>
74 #include <visp/vpParseArgv.h>
75 #include <visp/vpIoTools.h>
78 #define GETOPTARGS "cdi:h"
80 void usage(
const char *name,
const char *badparam, std::string ipath);
81 bool getOptions(
int argc,
const char **argv, std::string &ipath,
bool &click_allowed,
bool &display);
92 void usage(
const char *name,
const char *badparam, std::string ipath)
95 Test of ellipse tracking using vpMeEllipse.\n\
98 %s [-i <input image path>] [-c] [-h]\n", name);
102 -i <input image path> %s\n\
103 Set image input path.\n\
104 From this path read images \n\
105 \"ViSP-images/ellipse-1/image.%%04d.pgm\"\n\
106 Setting the VISP_INPUT_IMAGE_PATH environment\n\
107 variable produces the same behaviour than using\n\
111 Disable the mouse click. Useful to automaze the \n\
112 execution of this program without humain intervention.\n\
115 Turn off the display.\n\
122 fprintf(stdout,
"\nERROR: Bad parameter [%s]\n", badparam);
137 bool getOptions(
int argc,
const char **argv, std::string &ipath,
bool &click_allowed,
bool &display)
144 case 'c': click_allowed =
false;
break;
145 case 'd': display =
false;
break;
146 case 'i': ipath = optarg_;
break;
147 case 'h': usage(argv[0], NULL, ipath);
return false;
break;
150 usage(argv[0], optarg_, ipath);
155 if ((c == 1) || (c == -1)) {
157 usage(argv[0], NULL, ipath);
158 std::cerr <<
"ERROR: " << std::endl;
159 std::cerr <<
" Bad argument " << optarg_ << std::endl << std::endl;
168 main(
int argc,
const char ** argv)
171 std::string env_ipath;
172 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;
232 unsigned int iter = 1;
233 std::ostringstream s;
234 s.setf(std::ios::right, std::ios::adjustfield);
235 s <<
"image." << std::setw(4) << std::setfill(
'0') << iter <<
".pgm";
236 filename = dirname + s.str();
245 vpCTRACE <<
"Load: " << filename << std::endl;
255 std::cerr << std::endl
256 <<
"ERROR:" << std::endl;
257 std::cerr <<
" Cannot read " << filename << std::endl;
258 std::cerr <<
" Check your -i " << ipath <<
" option " << std::endl
259 <<
" or VISP_INPUT_IMAGE_PATH environment variable."
265 #if defined VISP_HAVE_X11
267 #elif defined VISP_HAVE_GTK
269 #elif defined VISP_HAVE_GDI
275 display.
init(I, 100, 100,
"Display...") ;
295 if (opt_click_allowed)
315 if (opt_display && opt_click_allowed) {
316 std::cout <<
"A click to continue..." << std::endl;
319 std::cout <<
"------------------------------------------------------------"<<std::endl;
322 for (iter = 1 ; iter < 51 ; iter++)
326 s <<
"image." << std::setw(4) << std::setfill(
'0') << iter <<
".pgm";
327 filename = dirname + s.str();
328 std::cout <<
"Tracking on image: " << filename << std::endl;
343 if (opt_display && opt_click_allowed) {
344 std::cout <<
"A click to exit..." << std::endl;
350 std::cout <<
"Catch an exception: " << e << std::endl;
358 vpERROR_TRACE(
"You do not have X11, GTK or GDI display functionalities...");
void initTracking(const vpImage< unsigned char > &I)
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.
error that can be emited by ViSP classes.
Class that tracks an ellipse moving edges.
Contains predetermined masks for sites and holds moving edges tracking parameters.
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 set_i(const double ii)
void track(const vpImage< unsigned char > &Im)
void setDisplay(vpMeSite::vpMeSiteDisplayType select)
static void display(const vpImage< unsigned char > &I)
void display(const vpImage< unsigned char > &I, vpColor col)
The vpDisplayGTK allows to display image using the GTK+ library version 1.2.
void init(vpImage< unsigned char > &I, int winx=-1, int winy=-1, const char *title=NULL)
void set_j(const double jj)
void setThreshold(const double &t)
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)
static void read(vpImage< unsigned char > &I, const char *filename)
double getSampleStep() const