2 #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/vpFlyCaptureGrabber.h>
7 #include <visp3/sensor/vpRealSense2.h>
8 #include <visp3/sensor/vpV4l2Grabber.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 #if defined(HAVE_OPENCV_VIDEOIO)
16 #include <opencv2/videoio.hpp>
19 #include "pose_helper.h"
31 int main(
int argc,
char **argv)
33 #if (defined(VISP_HAVE_X11) || defined(VISP_HAVE_GDI) || defined(VISP_HAVE_OPENCV)) && defined(VISP_HAVE_PUGIXML) && \
34 (defined(VISP_HAVE_V4L2) || defined(VISP_HAVE_DC1394) || defined(VISP_HAVE_CMU1394) || \
35 defined(HAVE_OPENCV_VIDEOIO) || defined(VISP_HAVE_FLYCAPTURE) || defined(VISP_HAVE_REALSENSE2))
36 #ifdef ENABLE_VISP_NAMESPACE
40 std::string opt_intrinsic_file;
41 std::string opt_camera_name;
42 double opt_square_width = 0.12;
45 for (
int i = 0; i < argc; i++) {
46 if (std::string(argv[i]) ==
"--intrinsic" && i + 1 < argc) {
47 opt_intrinsic_file = std::string(argv[i + 1]);
49 else if (std::string(argv[i]) ==
"--camera_name" && i + 1 < argc) {
50 opt_camera_name = std::string(argv[i + 1]);
52 else if (std::string(argv[i]) ==
"--camera_device" && i + 1 < argc) {
53 opt_device = atoi(argv[i + 1]);
55 else if (std::string(argv[i]) ==
"--help" || std::string(argv[i]) ==
"-h") {
56 std::cout <<
"\nUsage: " << argv[0] <<
" [--camera_device <camera device> (default: 0)]"
57 <<
" [--intrinsic <xml calibration file> (default: empty)]"
58 " [--camera_name <camera name in xml calibration file> (default: empty)]"
59 " [--square_width <square width in meter (default: 0.12)] [--help] [-h]\n"
60 <<
"\nExample using default camera parameters and square size:\n"
61 <<
" " << argv[0] <<
"\n"
62 <<
"\nExample fully tuned for a 0.1m x 0.1m square:\n"
63 <<
" " << argv[0] <<
" --intrinsic camera.xml --camera_name Camera --square_width 0.1\n"
74 if (!opt_intrinsic_file.empty() && !opt_camera_name.empty()) {
75 std::cout <<
"Intrinsic file: " << opt_intrinsic_file << std::endl;
76 std::cout <<
"Camera name : " << opt_camera_name << std::endl;
79 std::cout <<
"Succeed to read camera parameters from xml file" << std::endl;
82 std::cout <<
"Unable to read camera parameters from xml file" << std::endl;
87 #if defined(VISP_HAVE_V4L2)
89 std::ostringstream device;
90 device <<
"/dev/video" << opt_device;
91 std::cout <<
"Use Video 4 Linux grabber on device " << device.str() << std::endl;
95 #elif defined(VISP_HAVE_DC1394)
97 std::cout <<
"Use DC1394 grabber" << std::endl;
100 #elif defined(VISP_HAVE_CMU1394)
102 std::cout <<
"Use CMU1394 grabber" << std::endl;
105 #elif defined(VISP_HAVE_FLYCAPTURE)
107 std::cout <<
"Use FlyCapture grabber" << std::endl;
110 #elif defined(VISP_HAVE_REALSENSE2)
112 std::cout <<
"Use Realsense 2 grabber" << std::endl;
115 config.disable_stream(RS2_STREAM_DEPTH);
116 config.disable_stream(RS2_STREAM_INFRARED);
117 config.enable_stream(RS2_STREAM_COLOR, 640, 480, RS2_FORMAT_RGBA8, 30);
121 std::cout <<
"Read camera parameters from Realsense device" << std::endl;
123 #elif defined(HAVE_OPENCV_VIDEOIO)
124 std::cout <<
"Use OpenCV grabber on device " << opt_device << std::endl;
125 cv::VideoCapture g(opt_device);
127 std::cout <<
"Failed to open the camera" << std::endl;
136 std::cout <<
"Square width : " << opt_square_width << std::endl;
137 std::cout << cam << std::endl;
142 std::vector<vpDot2> dot(4);
143 std::vector<vpPoint> point;
144 std::vector<vpImagePoint> ip;
145 double L = opt_square_width / 2.;
146 point.push_back(
vpPoint(-L, -L, 0));
147 point.push_back(
vpPoint(L, -L, 0));
148 point.push_back(
vpPoint(L, L, 0));
149 point.push_back(
vpPoint(-L, L, 0));
151 #if defined(VISP_HAVE_X11)
153 #elif defined(VISP_HAVE_GDI)
155 #elif defined(HAVE_OPENCV_HIGHGUI)
160 bool apply_cv =
false;
166 #if defined(VISP_HAVE_V4L2) || defined(VISP_HAVE_DC1394) || defined(VISP_HAVE_CMU1394) || \
167 defined(VISP_HAVE_FLYCAPTURE) || defined(VISP_HAVE_REALSENSE2)
169 #elif defined(HAVE_OPENCV_VIDEOIO)
176 ip = track(I, dot, init_cv);
177 computePose(point, ip, cam, init_cv, cMo);
184 std::stringstream ss;
185 ss <<
"Translation: " << std::setprecision(5) << pose[0] <<
" " << pose[1] <<
" " << pose[2] <<
" [m]";
188 ss <<
"Rotation tu: " << std::setprecision(4) <<
vpMath::deg(pose[3]) <<
" " <<
vpMath::deg(pose[4]) <<
" "
194 std::cout <<
"Computer vision failure." << std::endl;
216 std::stringstream ss;
224 std::cout <<
"Catch an exception: " << e.
getMessage() << std::endl;
226 #elif (defined(VISP_HAVE_X11) || defined(VISP_HAVE_GDI) || defined(VISP_HAVE_OPENCV))
229 std::cout <<
"Install a 3rd party dedicated to frame grabbing (dc1394, cmu1394, v4l2, OpenCV, FlyCapture, "
230 "Realsense2), configure and build ViSP again to use this example"
235 std::cout <<
"Install a 3rd party dedicated to image display (X11, GDI, OpenCV), configure and build ViSP again to "
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
Perspective projection with distortion model.
@ perspectiveProjWithoutDistortion
Perspective projection without distortion model.
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...
static bool getClick(const vpImage< unsigned char > &I, bool blocking=true)
static void display(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), const std::string &frameName="", const vpColor &textColor=vpColor::black, const vpImagePoint &textOffset=vpImagePoint(15, 15))
static void flush(const vpImage< unsigned char > &I)
static void displayText(const vpImage< unsigned char > &I, const vpImagePoint &ip, const std::string &s, const vpColor &color)
error that can be emitted 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.
vpCameraParameters getCameraParameters(const rs2_stream &stream, vpCameraParameters::vpCameraParametersProjType type=vpCameraParameters::perspectiveProjWithDistortion, int index=-1) const
void acquire(vpImage< unsigned char > &grey, double *ts=nullptr)
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, bool verbose=true)
VISP_EXPORT double measureTimeMs()