2#include <visp3/core/vpConfig.h>
3#ifdef VISP_HAVE_MODULE_SENSOR
4#include <visp3/sensor/vpV4l2Grabber.h>
5#include <visp3/sensor/vp1394CMUGrabber.h>
6#include <visp3/sensor/vp1394TwoGrabber.h>
7#include <visp3/sensor/vpFlyCaptureGrabber.h>
8#include <visp3/sensor/vpRealSense2.h>
10#include <visp3/core/vpXmlParserCamera.h>
11#include <visp3/gui/vpDisplayGDI.h>
12#include <visp3/gui/vpDisplayOpenCV.h>
13#include <visp3/gui/vpDisplayX.h>
15#include "pose_helper.h"
27int main(
int argc,
char **argv)
29#if (defined(VISP_HAVE_X11) || defined(VISP_HAVE_GDI) || defined(VISP_HAVE_OPENCV)) && \
30 (defined(VISP_HAVE_V4L2) || defined(VISP_HAVE_DC1394) || defined(VISP_HAVE_CMU1394) || (VISP_HAVE_OPENCV_VERSION >= 0x020100) || defined(VISP_HAVE_FLYCAPTURE) || defined(VISP_HAVE_REALSENSE2) )
32 std::string opt_intrinsic_file;
33 std::string opt_camera_name;
34 double opt_square_width = 0.12;
37 for (
int i = 0; i < argc; i++) {
38 if (std::string(argv[i]) ==
"--intrinsic" && i + 1 < argc) {
39 opt_intrinsic_file = std::string(argv[i + 1]);
40 }
else if (std::string(argv[i]) ==
"--camera_name" && i + 1 < argc) {
41 opt_camera_name = std::string(argv[i + 1]);
42 }
else if (std::string(argv[i]) ==
"--camera_device" && i + 1 < argc) {
43 opt_device = atoi(argv[i + 1]);
44 }
else if (std::string(argv[i]) ==
"--help" || std::string(argv[i]) ==
"-h") {
45 std::cout <<
"\nUsage: " << argv[0]
46 <<
" [--camera_device <camera device> (default: 0)]"
47 <<
" [--intrinsic <xml calibration file> (default: empty)]"
48 " [--camera_name <camera name in xml calibration file> (default: empty)]"
49 " [--square_width <square width in meter (default: 0.12)] [--help] [-h]\n"
50 <<
"\nExample using default camera parameters and square size:\n"
51 <<
" " << argv[0] <<
"\n"
52 <<
"\nExample fully tuned for a 0.1m x 0.1m square:\n"
53 <<
" " << argv[0] <<
" --intrinsic camera.xml --camera_name Camera --square_width 0.1\n"
64 if (!opt_intrinsic_file.empty() && !opt_camera_name.empty()) {
65 std::cout <<
"Intrinsic file: " << opt_intrinsic_file << std::endl;
66 std::cout <<
"Camera name : " << opt_camera_name << std::endl;
68 std::cout <<
"Succeed to read camera parameters from xml file" << std::endl;
70 std::cout <<
"Unable to read camera parameters from xml file" << std::endl;
75#if defined(VISP_HAVE_V4L2)
77 std::ostringstream device;
78 device <<
"/dev/video" << opt_device;
79 std::cout <<
"Use Video 4 Linux grabber on device " << device.str() << std::endl;
83#elif defined(VISP_HAVE_DC1394)
85 std::cout <<
"Use DC1394 grabber" << std::endl;
88#elif defined(VISP_HAVE_CMU1394)
90 std::cout <<
"Use CMU1394 grabber" << std::endl;
93#elif defined(VISP_HAVE_FLYCAPTURE)
95 std::cout <<
"Use FlyCapture grabber" << std::endl;
98#elif defined(VISP_HAVE_REALSENSE2)
100 std::cout <<
"Use Realsense 2 grabber" << std::endl;
103 config.disable_stream(RS2_STREAM_DEPTH);
104 config.disable_stream(RS2_STREAM_INFRARED);
105 config.enable_stream(RS2_STREAM_COLOR, 640, 480, RS2_FORMAT_RGBA8, 30);
109 std::cout <<
"Read camera parameters from Realsense device" << std::endl;
111#elif defined(VISP_HAVE_OPENCV)
112 std::cout <<
"Use OpenCV grabber on device " << opt_device << std::endl;
113 cv::VideoCapture g(opt_device);
115 std::cout <<
"Failed to open the camera" << std::endl;
124 std::cout <<
"Square width : " << opt_square_width << std::endl;
125 std::cout << cam << std::endl;
130 std::vector<vpDot2> dot(4);
131 std::vector<vpPoint> point;
132 std::vector<vpImagePoint> ip;
133 double L = opt_square_width / 2.;
134 point.push_back(
vpPoint(-L, -L, 0));
135 point.push_back(
vpPoint( L, -L, 0));
136 point.push_back(
vpPoint( L, L, 0));
137 point.push_back(
vpPoint(-L, L, 0));
139#if defined(VISP_HAVE_X11)
141#elif defined(VISP_HAVE_GDI)
143#elif defined(VISP_HAVE_OPENCV)
148 bool apply_cv =
false;
154#if defined(VISP_HAVE_V4L2) || defined(VISP_HAVE_DC1394) || defined(VISP_HAVE_CMU1394) || defined(VISP_HAVE_FLYCAPTURE) || defined(VISP_HAVE_REALSENSE2)
156#elif defined(VISP_HAVE_OPENCV)
163 ip = track(I, dot, init_cv);
164 computePose(point, ip, cam, init_cv, cMo);
171 std::stringstream ss;
172 ss <<
"Translation: " << std::setprecision(5) << pose[0] <<
" " << pose[1] <<
" " << pose[2] <<
" [m]";
180 std::cout <<
"Computer vision failure." << std::endl;
201 std::stringstream ss;
208 std::cout <<
"Catch an exception: " << e.
getMessage() << std::endl;
210#elif (defined(VISP_HAVE_X11) || defined(VISP_HAVE_GDI) || defined(VISP_HAVE_OPENCV))
213 std::cout <<
"Install a 3rd party dedicated to frame grabbing (dc1394, cmu1394, v4l2, OpenCV, FlyCapture, Realsense2), configure and build ViSP again to use this example" << std::endl;
217 std::cout <<
"Install a 3rd party dedicated to image display (X11, GDI, OpenCV), configure and build ViSP again to use this example" << std::endl;
Firewire cameras video capture based on CMU 1394 Digital Camera SDK.
void open(vpImage< unsigned char > &I)
Class for firewire ieee1394 video devices using libdc1394-2.x api.
void open(vpImage< unsigned char > &I)
Generic class defining intrinsic camera parameters.
@ perspectiveProjWithDistortion
@ perspectiveProjWithoutDistortion
static const vpColor none
Display for windows using GDI (available on any windows 32 platform).
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)
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))
static void displayText(const vpImage< unsigned char > &I, const vpImagePoint &ip, const std::string &s, const vpColor &color)
error that can be emited by ViSP classes.
const char * getMessage() const
void open(vpImage< unsigned char > &I)
Implementation of an homogeneous matrix and operations on such kind of matrices.
static void convert(const vpImage< unsigned char > &src, vpImage< vpRGBa > &dest)
unsigned int getWidth() const
unsigned int getHeight() const
static double deg(double rad)
Class that defines a 3D point in the object frame and allows forward projection of a 3D point in the ...
Implementation of a pose vector and operations on poses.
void acquire(vpImage< unsigned char > &grey, double *ts=NULL)
vpCameraParameters getCameraParameters(const rs2_stream &stream, vpCameraParameters::vpCameraParametersProjType type=vpCameraParameters::perspectiveProjWithDistortion, int index=-1) const
bool open(const rs2::config &cfg=rs2::config())
Class that is a wrapper over the Video4Linux2 (V4L2) driver.
void open(vpImage< unsigned char > &I)
void setScale(unsigned scale=vpV4l2Grabber::DEFAULT_SCALE)
void setDevice(const std::string &devname)
XML parser to load and save intrinsic camera parameters.
int parse(vpCameraParameters &cam, const std::string &filename, const std::string &camera_name, const vpCameraParameters::vpCameraParametersProjType &projModel, unsigned int image_width=0, unsigned int image_height=0)
VISP_EXPORT double measureTimeMs()