ViSP  2.9.0
tutorial-mb-hybrid-tracker.cpp
1 
2 #include <visp/vpDisplayGDI.h>
3 #include <visp/vpDisplayX.h>
4 #include <visp/vpImageIo.h>
5 #include <visp/vpMbEdgeKltTracker.h>
6 
7 int main()
8 {
9 #ifdef VISP_HAVE_OPENCV
10  try {
14 
15  vpImageIo::read(I, "teabox.pgm");
16 
17 #if defined(VISP_HAVE_X11)
18  vpDisplayX display(I,100,100,"Model-based hybrid tracker");;
19 #elif defined(VISP_HAVE_GDI)
20  vpDisplayGDI display(I,100,100,"Model-based hybrid tracker");;
21 #else
22  std::cout << "No image viewer is available..." << std::endl;
23 #endif
24 
25  vpMbEdgeKltTracker tracker;
26 #ifdef VISP_HAVE_XML2
27  tracker.loadConfigFile("teabox.xml");
28 #else
29  vpMe me;
30  me.setMaskSize(5);
31  me.setMaskNumber(180);
32  me.setRange(8);
33  me.setThreshold(10000);
34  me.setMu1(0.5);
35  me.setMu2(0.5);
36  me.setSampleStep(4);
37  me.setNbTotalSample(250);
38  tracker.setMovingEdge(me);
39  tracker.setMaskBorder(5);
40  vpKltOpencv klt_settings;
41  klt_settings.setMaxFeatures(300);
42  klt_settings.setWindowSize(5);
43  klt_settings.setQuality(0.015);
44  klt_settings.setMinDistance(8);
45  klt_settings.setHarrisFreeParameter(0.01);
46  klt_settings.setBlockSize(3);
47  klt_settings.setPyramidLevels(3);
48  tracker.setKltOpencv(klt_settings);
49  cam.initPersProjWithoutDistortion(839, 839, 325, 243);
50  tracker.setCameraParameters(cam);
51  tracker.setAngleAppear( vpMath::rad(70) );
52  tracker.setAngleDisappear( vpMath::rad(80) );
53  tracker.setNearClippingDistance(0.1);
54  tracker.setFarClippingDistance(100.0);
56 #endif
57  tracker.setOgreVisibilityTest(true);
58  tracker.loadModel("teabox.cao");
59  tracker.setDisplayFeatures(true);
60  tracker.initClick(I, "teabox.init");
61 
62  while(1){
64  tracker.track(I);
65  tracker.getPose(cMo);
66  tracker.getCameraParameters(cam);
67  tracker.display(I, cMo, cam, vpColor::red, 2, true);
68  vpDisplay::displayFrame(I, cMo, cam, 0.025, vpColor::none, 3);
70 
71  if (vpDisplay::getClick(I, false))
72  break;
73  vpTime::wait(40);
74  }
75 
76 #ifdef VISP_HAVE_XML2
78 #endif
79 #ifdef VISP_HAVE_COIN
80  SoDB::finish();
81 #endif
82  }
83  catch(vpException e) {
84  std::cout << "Catch an exception: " << e << std::endl;
85  }
86 #endif
87 }
void setKltOpencv(const vpKltOpencv &t)
void setMovingEdge(const vpMe &me)
void setQuality(double input)
Definition: vpKltOpencv.h:264
The class provides a data structure for the homogeneous matrices as well as a set of operations on th...
void setMaskNumber(const unsigned int &a)
Definition: vpMe.cpp:480
Display for windows using GDI (available on any windows 32 platform).
Definition: vpDisplayGDI.h:132
void setSampleStep(const double &s)
Definition: vpMe.h:271
void setNbTotalSample(const int &nb)
Definition: vpMe.h:199
Define the X11 console to display images.
Definition: vpDisplayX.h:152
static const vpColor none
Definition: vpColor.h:179
error that can be emited by ViSP classes.
Definition: vpException.h:76
Contains predetermined masks for sites and holds moving edges tracking parameters.
Definition: vpMe.h:70
void setPyramidLevels(const int input)
Definition: vpKltOpencv.h:263
virtual void setClipping(const unsigned int &flags)
void setBlockSize(const int input)
Definition: vpKltOpencv.h:219
static int wait(double t0, double t)
Definition: vpTime.cpp:149
static void flush(const vpImage< unsigned char > &I)
Definition: vpDisplay.cpp:1994
virtual void setFarClippingDistance(const double &dist)
void setMu1(const double &mu_1)
Definition: vpMe.h:171
static const vpColor red
Definition: vpColor.h:167
void initPersProjWithoutDistortion(const double px, const double py, const double u0, const double v0)
virtual void setOgreVisibilityTest(const bool &v)
void setMaskSize(const unsigned int &a)
Definition: vpMe.cpp:488
void setWindowSize(const int input)
Definition: vpKltOpencv.h:274
void getPose(vpHomogeneousMatrix &cMo_) const
Definition: vpMbTracker.h:177
static void display(const vpImage< unsigned char > &I)
Definition: vpDisplay.cpp:206
virtual void track(const vpImage< unsigned char > &I)
virtual void getCameraParameters(vpCameraParameters &camera) const
Definition: vpMbTracker.h:158
virtual void display(const vpImage< unsigned char > &I, const vpHomogeneousMatrix &cMo, const vpCameraParameters &cam, const vpColor &col, const unsigned int thickness=1, const bool displayFullModel=false)
Generic class defining intrinsic camera parameters.
virtual void setAngleAppear(const double &a)
virtual void setAngleDisappear(const double &a)
void loadConfigFile(const char *configFile)
virtual void initClick(const vpImage< unsigned char > &I, const std::string &initFile, const bool displayHelp=false)
static void displayFrame(const vpImage< unsigned char > &I, const vpHomogeneousMatrix &cMo, const vpCameraParameters &cam, double size, const vpColor &color, unsigned int thickness=1)
Definition: vpDisplay.cpp:371
static double rad(double deg)
Definition: vpMath.h:100
virtual void setCameraParameters(const vpCameraParameters &cam)
Hybrid tracker based on moving-edges and keypoints tracked using KLT tracker.
static void cleanup()
Definition: vpXmlParser.h:220
virtual unsigned int getClipping() const
void setMu2(const double &mu_2)
Definition: vpMe.h:185
void setMaskBorder(const unsigned int &e)
Wrapper for the KLT (Kanade-Lucas-Tomasi) feature tracker implemented in OpenCV.
Definition: vpKltOpencv.h:103
void setThreshold(const double &t)
Definition: vpMe.h:299
virtual bool getClick(bool blocking=true)=0
void setDisplayFeatures(const bool displayF)
Definition: vpMbTracker.h:247
void setRange(const unsigned int &r)
Definition: vpMe.h:229
void setMaxFeatures(const int input)
static void read(vpImage< unsigned char > &I, const char *filename)
Definition: vpImageIo.cpp:278
void setMinDistance(double input)
Definition: vpKltOpencv.h:243
virtual void loadModel(const std::string &modelFile)
void setHarrisFreeParameter(double input)
Definition: vpKltOpencv.h:227
virtual void setNearClippingDistance(const double &dist)