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))
37 std::string opt_intrinsic_file;
38 std::string opt_camera_name;
39 double opt_square_width = 0.12;
42 for (
int i = 0; i < argc; i++) {
43 if (std::string(argv[i]) ==
"--intrinsic" && i + 1 < argc) {
44 opt_intrinsic_file = std::string(argv[i + 1]);
46 else if (std::string(argv[i]) ==
"--camera_name" && i + 1 < argc) {
47 opt_camera_name = std::string(argv[i + 1]);
49 else if (std::string(argv[i]) ==
"--camera_device" && i + 1 < argc) {
50 opt_device = atoi(argv[i + 1]);
52 else if (std::string(argv[i]) ==
"--help" || std::string(argv[i]) ==
"-h") {
53 std::cout <<
"\nUsage: " << argv[0] <<
" [--camera_device <camera device> (default: 0)]"
54 <<
" [--intrinsic <xml calibration file> (default: empty)]"
55 " [--camera_name <camera name in xml calibration file> (default: empty)]"
56 " [--square_width <square width in meter (default: 0.12)] [--help] [-h]\n"
57 <<
"\nExample using default camera parameters and square size:\n"
58 <<
" " << argv[0] <<
"\n"
59 <<
"\nExample fully tuned for a 0.1m x 0.1m square:\n"
60 <<
" " << argv[0] <<
" --intrinsic camera.xml --camera_name Camera --square_width 0.1\n"
71 if (!opt_intrinsic_file.empty() && !opt_camera_name.empty()) {
72 std::cout <<
"Intrinsic file: " << opt_intrinsic_file << std::endl;
73 std::cout <<
"Camera name : " << opt_camera_name << std::endl;
76 std::cout <<
"Succeed to read camera parameters from xml file" << std::endl;
79 std::cout <<
"Unable to read camera parameters from xml file" << std::endl;
84 #if defined(VISP_HAVE_V4L2)
86 std::ostringstream device;
87 device <<
"/dev/video" << opt_device;
88 std::cout <<
"Use Video 4 Linux grabber on device " << device.str() << std::endl;
92 #elif defined(VISP_HAVE_DC1394)
94 std::cout <<
"Use DC1394 grabber" << std::endl;
97 #elif defined(VISP_HAVE_CMU1394)
99 std::cout <<
"Use CMU1394 grabber" << std::endl;
102 #elif defined(VISP_HAVE_FLYCAPTURE)
104 std::cout <<
"Use FlyCapture grabber" << std::endl;
107 #elif defined(VISP_HAVE_REALSENSE2)
109 std::cout <<
"Use Realsense 2 grabber" << std::endl;
112 config.disable_stream(RS2_STREAM_DEPTH);
113 config.disable_stream(RS2_STREAM_INFRARED);
114 config.enable_stream(RS2_STREAM_COLOR, 640, 480, RS2_FORMAT_RGBA8, 30);
118 std::cout <<
"Read camera parameters from Realsense device" << std::endl;
120 #elif defined(HAVE_OPENCV_VIDEOIO)
121 std::cout <<
"Use OpenCV grabber on device " << opt_device << std::endl;
122 cv::VideoCapture g(opt_device);
124 std::cout <<
"Failed to open the camera" << std::endl;
133 std::cout <<
"Square width : " << opt_square_width << std::endl;
134 std::cout << cam << std::endl;
139 std::vector<vpDot2> dot(4);
140 std::vector<vpPoint> point;
141 std::vector<vpImagePoint> ip;
142 double L = opt_square_width / 2.;
143 point.push_back(
vpPoint(-L, -L, 0));
144 point.push_back(
vpPoint(L, -L, 0));
145 point.push_back(
vpPoint(L, L, 0));
146 point.push_back(
vpPoint(-L, L, 0));
148 #if defined(VISP_HAVE_X11)
150 #elif defined(VISP_HAVE_GDI)
152 #elif defined(HAVE_OPENCV_HIGHGUI)
157 bool apply_cv =
false;
163 #if defined(VISP_HAVE_V4L2) || defined(VISP_HAVE_DC1394) || defined(VISP_HAVE_CMU1394) || \
164 defined(VISP_HAVE_FLYCAPTURE) || defined(VISP_HAVE_REALSENSE2)
166 #elif defined(HAVE_OPENCV_VIDEOIO)
173 ip = track(I, dot, init_cv);
174 computePose(point, ip, cam, init_cv, cMo);
181 std::stringstream ss;
182 ss <<
"Translation: " << std::setprecision(5) << pose[0] <<
" " << pose[1] <<
" " << pose[2] <<
" [m]";
185 ss <<
"Rotation tu: " << std::setprecision(4) <<
vpMath::deg(pose[3]) <<
" " <<
vpMath::deg(pose[4]) <<
" "
191 std::cout <<
"Computer vision failure." << std::endl;
213 std::stringstream ss;
221 std::cout <<
"Catch an exception: " << e.
getMessage() << std::endl;
223 #elif (defined(VISP_HAVE_X11) || defined(VISP_HAVE_GDI) || defined(VISP_HAVE_OPENCV))
226 std::cout <<
"Install a 3rd party dedicated to frame grabbing (dc1394, cmu1394, v4l2, OpenCV, FlyCapture, "
227 "Realsense2), configure and build ViSP again to use this example"
232 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...
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 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()