1 #include <visp3/core/vpConfig.h> 3 #include <visp3/core/vpIoTools.h> 4 #include <visp3/gui/vpDisplayGDI.h> 5 #include <visp3/gui/vpDisplayOpenCV.h> 6 #include <visp3/gui/vpDisplayX.h> 7 #include <visp3/io/vpVideoReader.h> 8 #include <visp3/mbt/vpMbGenericTracker.h> 9 #include <visp3/vision/vpKeyPoint.h> 11 #if (VISP_HAVE_OPENCV_VERSION >= 0x020400) 15 std::vector<cv::KeyPoint> trainKeyPoints;
17 keypoint_learning.
detect(I, trainKeyPoints, elapsedTime);
21 std::vector<vpPolygon> polygons;
22 std::vector<std::vector<vpPoint> > roisPt;
23 std::pair<std::vector<vpPolygon>, std::vector<std::vector<vpPoint> > > pair = tracker.
getPolygonFaces();
24 polygons = pair.first;
27 std::vector<cv::Point3f> points3f;
36 keypoint_learning.
buildReference(I, trainKeyPoints, points3f,
true,
id);
40 for (std::vector<cv::KeyPoint>::const_iterator it = trainKeyPoints.begin(); it != trainKeyPoints.end(); ++it) {
47 int main(
int argc,
char **argv)
49 #if (VISP_HAVE_OPENCV_VERSION >= 0x020400) 52 std::string videoname =
"cube.mp4";
54 for (
int i = 0; i < argc; i++) {
55 if (std::string(argv[i]) ==
"--name")
56 videoname = std::string(argv[i + 1]);
57 else if (std::string(argv[i]) ==
"--help" || std::string(argv[i]) ==
"-h") {
58 std::cout <<
"\nUsage: " << argv[0] <<
" [--name <video name>] [--help] [-h]\n" << std::endl;
65 if (!parentname.empty())
66 objectname = parentname +
"/" + objectname;
68 std::cout <<
"Video name: " << videoname << std::endl;
69 std::cout <<
"Tracker requested config files: " << objectname <<
".[init," 71 <<
"cao or wrl]" << std::endl;
72 std::cout <<
"Tracker optional config files: " << objectname <<
".[ppm]" << std::endl;
114 vpKeyPoint keypoint_learning(
"ORB",
"ORB",
"BruteForce-Hamming");
115 #if (VISP_HAVE_OPENCV_VERSION < 0x030000) 116 keypoint_learning.setDetectorParameter(
"ORB",
"nLevels", 1);
118 cv::Ptr<cv::ORB> orb_learning = keypoint_learning.
getDetector(
"ORB").dynamicCast<cv::ORB>();
120 orb_learning->setNLevels(1);
125 #if defined(VISP_HAVE_X11) 127 #elif defined(VISP_HAVE_GDI) 129 #elif defined(VISP_HAVE_OPENCV) 132 std::cout <<
"No image viewer is available..." << std::endl;
139 std::string imageName[] = {
"cube0001.png",
"cube0150.png",
"cube0200.png"};
141 vpHomogeneousMatrix(0.02143385294, 0.1098083886, 0.5127439561, 2.087159614, 1.141775176, -0.4701291124),
142 vpHomogeneousMatrix(0.02651282185, -0.03713587374, 0.6873765919, 2.314744454, 0.3492296488, -0.1226054828),
143 vpHomogeneousMatrix(0.02965448956, -0.07283091786, 0.7253526051, 2.300529617, -0.4286674806, 0.1788761025)};
144 for (
int i = 0; i < 3; i++) {
147 display.
init(I, 10, 10);
149 std::stringstream title;
150 title <<
"Learning cube on image: " << imageName[i];
156 tracker.
setPose(I, initPoseTab[i]);
169 learnCube(I, tracker, keypoint_learning, i);
191 vpKeyPoint keypoint_detection(
"ORB",
"ORB",
"BruteForce-Hamming");
192 #if (VISP_HAVE_OPENCV_VERSION < 0x030000) 193 keypoint_detection.setDetectorParameter(
"ORB",
"nLevels", 1);
195 cv::Ptr<cv::ORB> orb_detector = keypoint_detection.getDetector(
"ORB").dynamicCast<cv::ORB>();
196 orb_detector = keypoint_detection.getDetector(
"ORB").dynamicCast<cv::ORB>();
198 orb_detector->setNLevels(1);
204 keypoint_detection.loadLearningData(
"cube_learning_data.bin",
true);
209 keypoint_detection.createImageMatching(I, IMatching);
216 #if defined VISP_HAVE_X11 218 #elif defined VISP_HAVE_GTK 220 #elif defined VISP_HAVE_GDI 225 display2.
init(IMatching, 50, 50,
"Display matching between learned and current images");
229 bool click_done =
false;
236 keypoint_detection.insertImageMatching(I, IMatching);
244 if (keypoint_detection.matchPoint(I, cam, cMo, error, elapsedTime)) {
256 keypoint_detection.displayMatching(I, IMatching);
259 std::vector<vpImagePoint> ransacInliers = keypoint_detection.getRansacInliers();
260 std::vector<vpImagePoint> ransacOutliers = keypoint_detection.getRansacOutliers();
264 for (std::vector<vpImagePoint>::const_iterator it = ransacInliers.begin(); it != ransacInliers.end(); ++it) {
267 imPt.set_u(imPt.get_u() + I.
getWidth());
268 imPt.set_v(imPt.get_v() + I.
getHeight());
274 for (std::vector<vpImagePoint>::const_iterator it = ransacOutliers.begin(); it != ransacOutliers.end(); ++it) {
277 imPt.set_u(imPt.get_u() + I.
getWidth());
278 imPt.set_v(imPt.get_v() + I.
getHeight());
284 keypoint_detection.displayMatching(I, IMatching);
292 tracker.
setPose(IMatching, cMo);
314 std::cout <<
"Catch an exception: " << e << std::endl;
319 std::cout <<
"Install OpenCV and rebuild ViSP to use this example." << std::endl;
virtual void track(const vpImage< unsigned char > &I)
static bool getClick(const vpImage< unsigned char > &I, bool blocking=true)
virtual void display(const vpImage< unsigned char > &I, const vpHomogeneousMatrix &cMo, const vpCameraParameters &cam, const vpColor &col, unsigned int thickness=1, bool displayFullModel=false)
unsigned int getWidth() const
Implementation of an homogeneous matrix and operations on such kind of matrices.
void setMaskNumber(const unsigned int &a)
Display for windows using GDI (available on any windows 32 platform).
void setSampleStep(const double &s)
virtual void setClipping(const unsigned int &flags)
static void displayText(const vpImage< unsigned char > &I, const vpImagePoint &ip, const std::string &s, const vpColor &color)
void setNbTotalSample(const int &nb)
virtual void setDisplayFeatures(bool displayF)
Use the X11 console to display images on unix-like OS. Thus to enable this class X11 should be instal...
Class that enables to manipulate easily a video file or a sequence of images. As it inherits from the...
static const vpColor none
virtual void setAngleDisappear(const double &a)
error that can be emited by ViSP classes.
void init(vpImage< unsigned char > &I, int winx=-1, int winy=-1, const std::string &title="")
virtual void setMovingEdge(const vpMe &me)
static const vpColor green
Real-time 6D object pose tracking using its CAD model.
static void flush(const vpImage< unsigned char > &I)
void setMu1(const double &mu_1)
void open(vpImage< vpRGBa > &I)
static void compute3DForPointsInPolygons(const vpHomogeneousMatrix &cMo, const vpCameraParameters &cam, std::vector< cv::KeyPoint > &candidates, const std::vector< vpPolygon > &polygons, const std::vector< std::vector< vpPoint > > &roisPt, std::vector< cv::Point3f > &points, cv::Mat *descriptors=NULL)
virtual void loadModel(const std::string &modelFile, bool verbose=false, const vpHomogeneousMatrix &T=vpHomogeneousMatrix())
void setMaskSize(const unsigned int &a)
virtual void getPose(vpHomogeneousMatrix &cMo) const
static void display(const vpImage< unsigned char > &I)
The vpDisplayOpenCV allows to display image using the OpenCV library. Thus to enable this class OpenC...
virtual void loadConfigFile(const std::string &configFile, bool verbose=true)
Generic class defining intrinsic camera parameters.
The vpDisplayGTK allows to display image using the GTK 3rd party library. Thus to enable this class G...
void acquire(vpImage< vpRGBa > &I)
virtual void setAngleAppear(const double &a)
unsigned int buildReference(const vpImage< unsigned char > &I)
void saveLearningData(const std::string &filename, bool binaryMode=false, bool saveTrainingImages=true)
static double rad(double deg)
void initPersProjWithoutDistortion(double px, double py, double u0, double v0)
virtual void setNearClippingDistance(const double &dist)
virtual void setCameraParameters(const vpCameraParameters &camera)
static void displayCircle(const vpImage< unsigned char > &I, const vpImagePoint ¢er, unsigned int radius, const vpColor &color, bool fill=false, unsigned int thickness=1)
static void displayCross(const vpImage< unsigned char > &I, const vpImagePoint &ip, unsigned int size, const vpColor &color, unsigned int thickness=1)
void setMu2(const double &mu_2)
virtual void getCameraParameters(vpCameraParameters &camera) const
static void read(vpImage< unsigned char > &I, const std::string &filename)
static void displayFrame(const vpImage< unsigned char > &I, const vpHomogeneousMatrix &cMo, const vpCameraParameters &cam, double size, const vpColor &color=vpColor::none, unsigned int thickness=1, const vpImagePoint &offset=vpImagePoint(0, 0))
virtual void setOgreVisibilityTest(const bool &v)
Class that allows keypoints detection (and descriptors extraction) and matching thanks to OpenCV libr...
virtual void setFarClippingDistance(const double &dist)
virtual void setPose(const vpImage< unsigned char > &I, const vpHomogeneousMatrix &cdMo)
void setThreshold(const double &t)
virtual std::pair< std::vector< vpPolygon >, std::vector< std::vector< vpPoint > > > getPolygonFaces(bool orderPolygons=true, bool useVisibility=true, bool clipPolygon=false)
void setFileName(const std::string &filename)
unsigned int getHeight() const
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)
static void setTitle(const vpImage< unsigned char > &I, const std::string &windowtitle)
cv::Ptr< cv::FeatureDetector > getDetector(const vpFeatureDetectorType &type) const
void detect(const vpImage< unsigned char > &I, std::vector< cv::KeyPoint > &keyPoints, const vpRect &rectangle=vpRect())
virtual void getClipping(unsigned int &clippingFlag1, unsigned int &clippingFlag2) const