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/me/vpMeLine.h>
73 #include <visp3/visual_features/vpFeatureBuilder.h>
74 #include <visp3/visual_features/vpFeatureLine.h>
76 #include <visp3/core/vpIoTools.h>
77 #include <visp3/io/vpParseArgv.h>
80 #define GETOPTARGS "cdi:h"
82 void usage(
const char *name,
const char *badparam, std::string ipath);
83 bool getOptions(
int argc,
const char **argv, std::string &ipath,
bool &click_allowed,
bool &display);
94 void usage(
const char *name,
const char *badparam, std::string ipath)
97 Tracking of a line.\n\
100 %s [-i <input image path>] [-c] [-d] [-h]\n", name);
104 -i <input image path> %s\n\
105 Set image input path.\n\
106 From this path read \"line/image.%%04d.pgm\"\n\
108 Setting the VISP_INPUT_IMAGE_PATH environment\n\
109 variable produces the same behaviour than using\n\
113 Disable the mouse click. Useful to automaze the \n\
114 execution of this program without humain intervention.\n\
117 Turn off the display.\n\
120 Print the help.\n", ipath.c_str());
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)
146 click_allowed =
false;
155 usage(argv[0], NULL, ipath);
160 usage(argv[0], optarg_, ipath);
166 if ((c == 1) || (c == -1)) {
168 usage(argv[0], NULL, ipath);
169 std::cerr <<
"ERROR: " << std::endl;
170 std::cerr <<
" Bad argument " << optarg_ << std::endl << std::endl;
177 int main(
int argc,
const char **argv)
179 #if defined(VISP_HAVE_LAPACK) || defined(VISP_HAVE_EIGEN3) || defined(VISP_HAVE_OPENCV)
181 std::string env_ipath;
182 std::string opt_ipath;
185 std::string filename;
186 bool opt_click_allowed =
true;
187 bool opt_display =
true;
194 if (!env_ipath.empty())
198 if (getOptions(argc, argv, opt_ipath, opt_click_allowed, opt_display) ==
false) {
203 if (!opt_ipath.empty())
208 if (!opt_ipath.empty() && !env_ipath.empty()) {
209 if (ipath != env_ipath) {
210 std::cout << std::endl <<
"WARNING: " << std::endl;
211 std::cout <<
" Since -i <visp image path=" << ipath <<
"> "
212 <<
" is different from VISP_IMAGE_PATH=" << env_ipath << std::endl
213 <<
" we skip the environment variable." << std::endl;
218 if (opt_ipath.empty() && env_ipath.empty()) {
219 usage(argv[0], NULL, ipath);
220 std::cerr << std::endl <<
"ERROR:" << std::endl;
221 std::cerr <<
" Use -i <visp image path> option or set VISP_INPUT_IMAGE_PATH " << std::endl
222 <<
" environment variable to specify the location of the " << std::endl
223 <<
" image path where test images are located." << std::endl
237 unsigned int iter = 1;
238 std::ostringstream s;
239 s.setf(std::ios::right, std::ios::adjustfield);
240 s <<
"image." << std::setw(4) << std::setfill(
'0') << iter <<
".pgm";
250 vpCTRACE <<
"Load: " << filename << std::endl;
258 std::cerr << std::endl <<
"ERROR:" << std::endl;
259 std::cerr <<
" Cannot read " << filename << std::endl;
260 std::cerr <<
" Check your -i " << ipath <<
" option " << std::endl
261 <<
" or VISP_INPUT_IMAGE_PATH environment variable." << std::endl;
266 #if defined VISP_HAVE_X11
268 #elif defined VISP_HAVE_GTK
270 #elif defined VISP_HAVE_GDI
272 #elif defined VISP_HAVE_OPENCV
278 display.init(I, 100, 100,
"Display...");
298 if (opt_display && opt_click_allowed)
313 if (opt_display && opt_click_allowed) {
314 std::cout <<
"A click to continue..." << std::endl;
317 std::cout <<
"----------------------------------------------------------" << std::endl;
323 for (iter = 1; iter < 30; iter++) {
324 std::cout <<
"----------------------------------------------------------" << std::endl;
327 s <<
"image." << std::setw(4) << std::setfill(
'0') << iter <<
".pgm";
336 std::cout <<
"Tracking on image: " << filename << std::endl;
346 if (opt_click_allowed) {
347 std::cout <<
"A click to continue..." << std::endl;
352 if (opt_display && opt_click_allowed) {
353 std::cout <<
"A click to exit..." << std::endl;
358 std::cout <<
"Catch an exception: " << e << std::endl;
364 std::cout <<
"Cannot run this example: install Lapack, Eigen3 or OpenCV" << std::endl;
373 std::cout <<
"visp_me module or X11, GTK, GDI or OpenCV display "
374 "functionalities are required..."
Generic class defining intrinsic camera parameters.
static const vpColor green
Display for windows using GDI (available on any windows 32 platform).
The vpDisplayGTK allows to display image using the GTK 3rd party library. Thus to enable this class G...
The vpDisplayOpenCV allows to display image using the OpenCV library. Thus to enable this class OpenC...
Use the X11 console to display images on unix-like OS. Thus to enable this class X11 should be instal...
static bool getClick(const vpImage< unsigned char > &I, bool blocking=true)
static void display(const vpImage< unsigned char > &I)
static void flush(const vpImage< unsigned char > &I)
error that can be emited by ViSP classes.
static void create(vpFeaturePoint &s, const vpCameraParameters &cam, const vpDot &d)
Class that defines a 2D line visual feature which is composed by two parameters that are and ,...
static void read(vpImage< unsigned char > &I, const std::string &filename)
Class that defines a 2D point in an image. This class is useful for image processing and stores only ...
static double deg(double rad)
Class that tracks in an image a line moving edges.
void display(const vpImage< unsigned char > &I, vpColor col)
void track(const vpImage< unsigned char > &Im)
void initTracking(const vpImage< unsigned char > &I)
void setDisplay(vpMeSite::vpMeSiteDisplayType select)
void setRange(const unsigned int &r)
void setPointsToTrack(const int &n)
void setThreshold(const double &t)
static bool parse(int *argcPtr, const char **argv, vpArgvInfo *argTable, int flags)