Visual Servoing Platform  version 3.6.1 under development (2024-04-18)
tutorial-me-ellipse-tracker.cpp
1 #include <visp3/core/vpConfig.h>
3 #ifdef VISP_HAVE_MODULE_SENSOR
4 #include <visp3/sensor/vp1394CMUGrabber.h>
5 #include <visp3/sensor/vp1394TwoGrabber.h>
6 #include <visp3/sensor/vpV4l2Grabber.h>
7 #endif
8 #include <visp3/gui/vpDisplayGDI.h>
9 #include <visp3/gui/vpDisplayOpenCV.h>
10 #include <visp3/gui/vpDisplayX.h>
11 #include <visp3/me/vpMeEllipse.h>
12 
13 #if defined(HAVE_OPENCV_VIDEOIO)
14 #include <opencv2/videoio.hpp>
15 #endif
16 
17 int main()
18 {
19 #if (defined(VISP_HAVE_DC1394) || defined(VISP_HAVE_CMU1394) || defined(VISP_HAVE_V4L2) || defined(HAVE_OPENCV_VIDEOIO))
20  try {
22 
23 #if defined(VISP_HAVE_DC1394)
24  vp1394TwoGrabber g(false);
25 #elif defined(VISP_HAVE_CMU1394)
27 #elif defined(VISP_HAVE_V4L2)
28  vpV4l2Grabber g;
29 #elif defined(HAVE_OPENCV_VIDEOIO)
30  cv::VideoCapture g(0); // open the default camera
31  if (!g.isOpened()) { // check if we succeeded
32  std::cout << "Failed to open the camera" << std::endl;
33  return EXIT_FAILURE;
34  }
35  cv::Mat frame;
36 #endif
37 
38 #if defined(VISP_HAVE_DC1394) || defined(VISP_HAVE_V4L2) || defined(VISP_HAVE_CMU1394)
39  g.acquire(I);
40 #elif defined(HAVE_OPENCV_VIDEOIO)
41  g >> frame; // get a new frame from camera
42  vpImageConvert::convert(frame, I);
43 #endif
44 
45 #if defined(VISP_HAVE_X11)
46  vpDisplayX d(I, 0, 0, "Camera view");
47 #elif defined(VISP_HAVE_GDI)
48  vpDisplayGDI d(I, 0, 0, "Camera view");
49 #elif defined(HAVE_OPENCV_HIGHGUI)
50  vpDisplayOpenCV d(I, 0, 0, "Camera view");
51 #else
52  std::cout << "No image viewer is available..." << std::endl;
53 #endif
54 
57 
58  vpMe me;
59  me.setRange(25);
61  me.setThreshold(20);
62  me.setSampleStep(10);
63 
65  vpMeEllipse ellipse;
66  ellipse.setMe(&me);
68  ellipse.initTracking(I);
70 
71  while (1) {
72 #if defined(VISP_HAVE_DC1394) || defined(VISP_HAVE_V4L2) || defined(VISP_HAVE_CMU1394)
73  g.acquire(I);
74 #elif defined(HAVE_OPENCV_VIDEOIO)
75  g >> frame;
76  vpImageConvert::convert(frame, I);
77 #endif
79  ellipse.track(I);
80  ellipse.display(I, vpColor::red);
82  }
83  }
84  catch (const vpException &e) {
85  std::cout << "Catch an exception: " << e << std::endl;
86  }
87 #endif
88 }
Firewire cameras video capture based on CMU 1394 Digital Camera SDK.
void acquire(vpImage< unsigned char > &I)
Class for firewire ieee1394 video devices using libdc1394-2.x api.
static const vpColor red
Definition: vpColor.h:211
Display for windows using GDI (available on any windows 32 platform).
Definition: vpDisplayGDI.h:128
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...
Definition: vpDisplayX.h:128
static void display(const vpImage< unsigned char > &I)
static void flush(const vpImage< unsigned char > &I)
error that can be emitted by ViSP classes.
Definition: vpException.h:59
static void convert(const vpImage< unsigned char > &src, vpImage< vpRGBa > &dest)
Class that tracks an ellipse using moving edges.
Definition: vpMeEllipse.h:94
void display(const vpImage< unsigned char > &I, const vpColor &col, unsigned int thickness=1)
void initTracking(const vpImage< unsigned char > &I, bool trackCircle=false, bool trackArc=false)
void track(const vpImage< unsigned char > &I)
@ RANGE_RESULT
Definition: vpMeSite.h:75
void setDisplay(vpMeSite::vpMeSiteDisplayType select)
Definition: vpMeTracker.h:250
void setMe(vpMe *me)
Definition: vpMeTracker.h:278
Definition: vpMe.h:124
void setRange(const unsigned int &range)
Definition: vpMe.h:429
void setLikelihoodThresholdType(const vpLikelihoodThresholdType likelihood_threshold_type)
Definition: vpMe.h:519
void setThreshold(const double &threshold)
Definition: vpMe.h:480
void setSampleStep(const double &sample_step)
Definition: vpMe.h:436
@ NORMALIZED_THRESHOLD
Definition: vpMe.h:135
Class that is a wrapper over the Video4Linux2 (V4L2) driver.