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/core/vpIoTools.h> 72 #include <visp3/io/vpParseArgv.h> 73 #include <visp3/me/vpMeEllipse.h> 76 #define GETOPTARGS "acdi: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 Example of ellipse or arc of ellipse tracking using vpMeEllipse.\n\ 96 %s [-i <input image path>] [-c] [-a] [-h]\n", name);
100 -i <input image path> %s\n\ 101 Set image input path.\n\ 102 From this path read images \n\ 103 \"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\ 116 Enable arc of ellipse tracking.\n\ 119 Print the help.\n", ipath.c_str());
122 fprintf(stdout,
"\nERROR: Bad parameter [%s]\n", badparam);
138 bool getOptions(
int argc,
const char **argv, std::string &ipath,
bool &click_allowed,
bool &display,
bool &trackArc)
149 click_allowed =
false;
158 usage(argv[0], NULL, ipath);
163 usage(argv[0], optarg_, ipath);
169 if ((c == 1) || (c == -1)) {
171 usage(argv[0], NULL, ipath);
172 std::cerr <<
"ERROR: " << std::endl;
173 std::cerr <<
" Bad argument " << optarg_ << std::endl << std::endl;
180 int main(
int argc,
const char **argv)
182 #if defined(VISP_HAVE_LAPACK) || defined(VISP_HAVE_EIGEN3) || defined(VISP_HAVE_OPENCV) 184 std::string env_ipath;
185 std::string opt_ipath;
188 std::string filename;
189 bool opt_click_allowed =
true;
190 bool opt_display =
true;
191 bool opt_track_arc =
false;
198 if (!env_ipath.empty())
202 if (getOptions(argc, argv, opt_ipath, opt_click_allowed, opt_display, opt_track_arc) ==
false) {
207 if (!opt_ipath.empty())
212 if (!opt_ipath.empty() && !env_ipath.empty()) {
213 if (ipath != env_ipath) {
214 std::cout << std::endl <<
"WARNING: " << std::endl;
215 std::cout <<
" Since -i <visp image path=" << ipath <<
"> " 216 <<
" is different from VISP_IMAGE_PATH=" << env_ipath << std::endl
217 <<
" we skip the environment variable." << std::endl;
222 if (opt_ipath.empty() && env_ipath.empty()) {
223 usage(argv[0], NULL, ipath);
224 std::cerr << std::endl <<
"ERROR:" << std::endl;
225 std::cerr <<
" Use -i <visp image path> option or set VISP_INPUT_IMAGE_PATH " << std::endl
226 <<
" environment variable to specify the location of the " << std::endl
227 <<
" image path where test images are located." << std::endl
241 unsigned int iter = 1;
242 std::ostringstream s;
243 s.setf(std::ios::right, std::ios::adjustfield);
244 s <<
"image." << std::setw(4) << std::setfill(
'0') << iter <<
".pgm";
254 vpCTRACE <<
"Load: " << filename << std::endl;
262 std::cerr << std::endl <<
"ERROR:" << std::endl;
263 std::cerr <<
" Cannot read " << filename << std::endl;
264 std::cerr <<
" Check your -i " << ipath <<
" option " << std::endl
265 <<
" or VISP_INPUT_IMAGE_PATH environment variable." << std::endl;
270 #if defined VISP_HAVE_X11 272 #elif defined VISP_HAVE_GTK 274 #elif defined VISP_HAVE_GDI 276 #elif defined VISP_HAVE_OPENCV 282 display.
init(I, 100, 100,
"Display...");
299 me_ellipse.
setMe(&me);
301 if (opt_click_allowed)
305 std::vector<vpImagePoint> ip;
319 if (opt_display && opt_click_allowed) {
320 std::cout <<
"A click to continue..." << std::endl;
323 std::cout <<
"------------------------------------------------------------" << std::endl;
325 for (iter = 1; iter < 51; iter++)
329 s <<
"image." << std::setw(4) << std::setfill(
'0') << iter <<
".pgm";
331 std::cout <<
"Tracking on image: " << filename << std::endl;
346 if (opt_display && opt_click_allowed) {
347 std::cout <<
"A click to exit..." << std::endl;
352 std::cout <<
"Catch an exception: " << e << std::endl;
358 std::cout <<
"Cannot run this example: install Lapack, Eigen3 or OpenCV" << std::endl;
366 std::cout <<
"visp_me module or X11, GTK, GDI or OpenCV display " 367 "functionalities are required..." void track(const vpImage< unsigned char > &I)
static void read(vpImage< unsigned char > &I, const std::string &filename, int backend=IO_DEFAULT_BACKEND)
static bool getClick(const vpImage< unsigned char > &I, bool blocking=true)
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 using 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 initTracking(const vpImage< unsigned char > &I, bool trackArc=false)
double getSampleStep() const
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...
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)