42 #include <visp/vpConfig.h>
43 #include <visp/vpDebug.h>
49 #if (defined (VISP_HAVE_GTK) || defined(VISP_HAVE_X11) || defined(VISP_HAVE_GDI) || defined(VISP_HAVE_D3D9) || defined(VISP_HAVE_OPENCV))
51 #include <visp/vpImage.h>
52 #include <visp/vpImageIo.h>
53 #include <visp/vpParseArgv.h>
54 #include <visp/vpIoTools.h>
56 #include <visp/vpDisplayOpenCV.h>
57 #include <visp/vpDisplayGTK.h>
58 #include <visp/vpDisplayX.h>
59 #include <visp/vpDisplayGDI.h>
60 #include <visp/vpDisplayD3D.h>
70 #define GETOPTARGS "i:hlt:dc"
90 void usage(
const char *name,
const char *badparam, std::string ipath, vpDisplayType &dtype)
93 Test click functionnalities in video devices or display.\n\
96 %s [-i <input image path>] \n\
97 [-t <type of video device>] [-l] [-c] [-d] [-h]\n\
102 case vpX11: display =
"X11";
break;
103 case vpGTK: display =
"GTK";
break;
104 case vpGDI: display =
"GDI";
break;
105 case vpD3D: display =
"D3D";
break;
106 case vpCV: display =
"CV";
break;
111 -i <input image path> %s\n\
112 Set image input path.\n\
113 From this path read \"ViSP-images/Klimt/Klimt.pgm\"\n\
114 and \"ViSP-images/Klimt/Klimt.ppm\" images.\n\
115 Setting the VISP_INPUT_IMAGE_PATH environment\n\
116 variable produces the same behaviour than using\n\
119 -t <type of video device> \"%s\"\n\
120 String specifying the video device to use.\n\
122 \"X11\": only on UNIX platforms,\n\
123 \"GTK\": on all plaforms,\n\
124 \"GDI\": only on Windows platform (Graphics Device Interface),\n\
125 \"D3D\": only on Windows platform (Direct3D).\n\
126 \"CV\" : (OpenCV).\n\
129 Print the list of video-devices available and exit.\n\
132 Disable the mouse click. Useful to automaze the \n\
133 execution of this program without humain intervention.\n\
136 Turn off the display.\n\
139 Print the help.\n\n",
140 ipath.c_str(), display.c_str());
143 fprintf(stdout,
"\nERROR: Bad parameter [%s]\n", badparam);
164 bool getOptions(
int argc,
const char **argv,
165 std::string &ipath, vpDisplayType &dtype,
bool &list,
166 bool &click_allowed,
bool &display )
170 std::string sDisplayType;
174 case 'i': ipath = optarg;
break;
175 case 'l': list =
true;
break;
176 case 't': sDisplayType = optarg;
178 if (sDisplayType.compare(
"X11") == 0) {
181 else if (sDisplayType.compare(
"GTK") == 0) {
184 else if (sDisplayType.compare(
"GDI") == 0) {
187 else if (sDisplayType.compare(
"D3D") == 0) {
190 else if (sDisplayType.compare(
"CV") == 0) {
195 case 'h': usage(argv[0], NULL, ipath, dtype);
return false;
break;
196 case 'c': click_allowed =
false;
break;
197 case 'd': display =
false;
break;
200 usage(argv[0], optarg, ipath, dtype);
return false;
break;
205 if ((c == 1) || (c == -1)) {
207 usage(argv[0], NULL, ipath, dtype);
208 std::cerr <<
"ERROR: " << std::endl;
209 std::cerr <<
" Bad argument " << optarg << std::endl << std::endl;
217 main(
int argc,
const char ** argv)
220 std::string env_ipath;
221 std::string opt_ipath;
222 bool opt_list =
false;
223 vpDisplayType opt_dtype;
225 std::string filename;
226 bool opt_click_allowed =
true;
227 bool opt_display =
true;
230 #if defined VISP_HAVE_GTK
232 #elif defined VISP_HAVE_X11
234 #elif defined VISP_HAVE_GDI
236 #elif defined VISP_HAVE_D3D9
238 #elif defined VISP_HAVE_OPENCV
243 char *ptenv = getenv(
"VISP_INPUT_IMAGE_PATH");
248 if (! env_ipath.empty())
252 if (getOptions(argc, argv, opt_ipath, opt_dtype, opt_list,
253 opt_click_allowed, opt_display) ==
false) {
259 unsigned nbDevices = 0;
260 std::cout <<
"List of video-devices available: \n";
261 #if defined VISP_HAVE_GTK
262 std::cout <<
" GTK (use \"-t GTK\" option to use it)\n";
265 #if defined VISP_HAVE_X11
266 std::cout <<
" X11 (use \"-t X11\" option to use it)\n";
269 #if defined VISP_HAVE_GDI
270 std::cout <<
" GDI (use \"-t GDI\" option to use it)\n";
273 #if defined VISP_HAVE_D3D9
274 std::cout <<
" D3D (use \"-t D3D\" option to use it)\n";
277 #if defined VISP_HAVE_OPENCV
278 std::cout <<
" CV (use \"-t CV\" option to use it)\n";
282 std::cout <<
" No display is available\n";
289 if (!opt_ipath.empty())
294 if (!opt_ipath.empty() && !env_ipath.empty()) {
295 if (ipath != env_ipath) {
296 std::cout << std::endl
297 <<
"WARNING: " << std::endl;
298 std::cout <<
" Since -i <visp image path=" << ipath <<
"> "
299 <<
" is different from VISP_IMAGE_PATH=" << env_ipath << std::endl
300 <<
" we skip the environment variable." << std::endl;
305 if (opt_ipath.empty() && env_ipath.empty()){
306 usage(argv[0], NULL, ipath, opt_dtype);
307 std::cerr << std::endl
308 <<
"ERROR:" << std::endl;
309 std::cerr <<
" Use -i <visp image path> option or set VISP_INPUT_IMAGE_PATH "
311 <<
" environment variable to specify the location of the " << std::endl
312 <<
" image path where test images are located." << std::endl << std::endl;
321 vpCTRACE <<
"Load " << filename << std::endl;
329 std::cout <<
"Requested X11 display functionnalities..." << std::endl;
330 #if defined VISP_HAVE_X11
333 std::cout <<
" Sorry, X11 video device is not available.\n";
334 std::cout <<
"Use \"" << argv[0]
335 <<
" -l\" to print the list of available devices.\n";
340 std::cout <<
"Requested GTK display functionnalities..." << std::endl;
341 #if defined VISP_HAVE_GTK
344 std::cout <<
" Sorry, GTK video device is not available.\n";
345 std::cout <<
"Use \"" << argv[0]
346 <<
" -l\" to print the list of available devices.\n";
351 std::cout <<
"Requested GDI display functionnalities..." << std::endl;
352 #if defined VISP_HAVE_GDI
355 std::cout <<
" Sorry, GDI video device is not available.\n";
356 std::cout <<
"Use \"" << argv[0]
357 <<
" -l\" to print the list of available devices.\n";
362 std::cout <<
"Requested D3D display functionnalities..." << std::endl;
363 #if defined VISP_HAVE_D3D9
366 std::cout <<
" Sorry, D3D video device is not available.\n";
367 std::cout <<
"Use \"" << argv[0]
368 <<
" -l\" to print the list of available devices.\n";
373 std::cout <<
"Requested OpenCV display functionnalities..." << std::endl;
374 #if defined VISP_HAVE_OPENCV
377 std::cout <<
" Sorry, OpenCV video device is not available.\n";
378 std::cout <<
"Use \"" << argv[0]
379 <<
" -l\" to print the list of available devices.\n";
389 display->
init(I, 100, 100,
"Display...") ;
399 if ( opt_click_allowed ){
400 std::cout <<
"Click on a pixel to get his coordinates...\n";
404 std::cout <<
" You click down on pixel (" << ip <<
") ";
411 std::cout <<
" You click up on pixel (" << ip <<
") ";
418 std::cout <<
" Pointer poisition : " << ip << std::endl;
419 std::cout <<
"A click to exit...\n";
virtual void init(vpImage< unsigned char > &I, int x=-1, int y=-1, const char *title=NULL)=0
Class that defines generic functionnalities for display.
Display for windows using GDI (available on any windows 32 platform).
Define the X11 console to display images.
virtual bool getClickUp(vpImagePoint &ip, vpMouseButton::vpMouseButtonType &button, bool blocking=true)=0
static void flush(const vpImage< unsigned char > &I)
static bool parse(int *argcPtr, const char **argv, vpArgvInfo *argTable, int flags)
Display for windows using Direct3D.
virtual bool getPointerPosition(vpImagePoint &ip)=0
static void display(const vpImage< unsigned char > &I)
The vpDisplayOpenCV allows to display image using the opencv library.
The vpDisplayGTK allows to display image using the GTK+ library version 1.2.
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 ...
static void read(vpImage< unsigned char > &I, const char *filename)