50 #include <visp3/core/vpDebug.h>
51 #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/vpMeEllipse.h>
71 #include <visp3/io/vpParseArgv.h>
72 #include <visp3/core/vpIoTools.h>
75 #define GETOPTARGS "cdi:h"
77 void usage(
const char *name,
const char *badparam, std::string ipath);
78 bool getOptions(
int argc,
const char **argv, std::string &ipath,
bool &click_allowed,
bool &display);
89 void usage(
const char *name,
const char *badparam, std::string ipath)
92 Test of ellipse tracking using vpMeEllipse.\n\
95 %s [-i <input image path>] [-c] [-h]\n", name);
99 -i <input image path> %s\n\
100 Set image input path.\n\
101 From this path read images \n\
102 \"ViSP-images/ellipse-1/image.%%04d.pgm\"\n\
103 Setting the VISP_INPUT_IMAGE_PATH environment\n\
104 variable produces the same behaviour than using\n\
108 Disable the mouse click. Useful to automaze the \n\
109 execution of this program without humain intervention.\n\
112 Turn off the display.\n\
119 fprintf(stdout,
"\nERROR: Bad parameter [%s]\n", badparam);
134 bool getOptions(
int argc,
const char **argv, std::string &ipath,
bool &click_allowed,
bool &display)
141 case 'c': click_allowed =
false;
break;
142 case 'd': display =
false;
break;
143 case 'i': ipath = optarg_;
break;
144 case 'h': usage(argv[0], NULL, ipath);
return false;
break;
147 usage(argv[0], optarg_, ipath);
152 if ((c == 1) || (c == -1)) {
154 usage(argv[0], NULL, ipath);
155 std::cerr <<
"ERROR: " << std::endl;
156 std::cerr <<
" Bad argument " << optarg_ << std::endl << std::endl;
165 main(
int argc,
const char ** argv)
168 std::string env_ipath;
169 std::string opt_ipath;
172 std::string filename;
173 bool opt_click_allowed =
true;
174 bool opt_display =
true;
180 if (! env_ipath.empty())
184 if (getOptions(argc, argv, opt_ipath, opt_click_allowed, opt_display) ==
false) {
189 if (!opt_ipath.empty())
194 if (!opt_ipath.empty() && !env_ipath.empty()) {
195 if (ipath != env_ipath) {
196 std::cout << std::endl
197 <<
"WARNING: " << std::endl;
198 std::cout <<
" Since -i <visp image path=" << ipath <<
"> "
199 <<
" is different from VISP_IMAGE_PATH=" << env_ipath << std::endl
200 <<
" we skip the environment variable." << std::endl;
205 if (opt_ipath.empty() && env_ipath.empty()){
206 usage(argv[0], NULL, ipath);
207 std::cerr << std::endl
208 <<
"ERROR:" << std::endl;
209 std::cerr <<
" Use -i <visp image path> option or set VISP_INPUT_IMAGE_PATH "
211 <<
" environment variable to specify the location of the " << std::endl
212 <<
" image path where test images are located." << std::endl << std::endl;
226 unsigned int iter = 1;
227 std::ostringstream s;
228 s.setf(std::ios::right, std::ios::adjustfield);
229 s <<
"image." << std::setw(4) << std::setfill(
'0') << iter <<
".pgm";
239 vpCTRACE <<
"Load: " << filename << std::endl;
249 std::cerr << std::endl
250 <<
"ERROR:" << std::endl;
251 std::cerr <<
" Cannot read " << filename << std::endl;
252 std::cerr <<
" Check your -i " << ipath <<
" option " << std::endl
253 <<
" or VISP_INPUT_IMAGE_PATH environment variable."
259 #if defined VISP_HAVE_X11
261 #elif defined VISP_HAVE_GTK
263 #elif defined VISP_HAVE_GDI
265 #elif defined VISP_HAVE_OPENCV
271 display.
init(I, 100, 100,
"Display...") ;
291 if (opt_click_allowed)
295 std::vector<vpImagePoint> ip;
310 if (opt_display && opt_click_allowed) {
311 std::cout <<
"A click to continue..." << std::endl;
314 std::cout <<
"------------------------------------------------------------"<<std::endl;
317 for (iter = 1 ; iter < 51 ; iter++)
321 s <<
"image." << std::setw(4) << std::setfill(
'0') << iter <<
".pgm";
323 std::cout <<
"Tracking on image: " << filename << std::endl;
338 if (opt_display && opt_click_allowed) {
339 std::cout <<
"A click to exit..." << std::endl;
345 std::cout <<
"Catch an exception: " << e << std::endl;
354 std::cout <<
"visp_me module or X11, GTK, GDI or OpenCV display functionalities are required..." << std::endl;
static bool getClick(const vpImage< unsigned char > &I, bool blocking=true)
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)
Use the X11 console to display images on unix-like OS. Thus to enable this class X11 should be instal...
error that can be emited by ViSP classes.
Class that tracks an ellipse moving edges.
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 track(const vpImage< unsigned char > &Im)
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...
void display(const vpImage< unsigned char > &I, vpColor col)
The vpDisplayGTK allows to display image using the GTK 3rd party library. Thus to enable this class G...
static void read(vpImage< unsigned char > &I, const std::string &filename)
void setThreshold(const double &t)
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)
double getSampleStep() const