2#include <visp3/core/vpConfig.h>
3#include <visp3/core/vpImage.h>
4#include <visp3/gui/vpDisplayFactory.h>
5#include <visp3/io/vpImageStorageWorker.h>
6#include <visp3/sensor/vpRealSense2.h>
8void usage(
const char *argv[],
int error)
10 std::cout <<
"SYNOPSIS" << std::endl
11 <<
" " << argv[0] <<
" [--fps <6|15|30|60>]"
12 <<
" [--record <mode>]"
14 <<
" [--help] [-h]" << std::endl
16 std::cout <<
"DESCRIPTION" << std::endl
17 <<
" --fps <6|15|30|60>" << std::endl
18 <<
" Frames per second." << std::endl
19 <<
" Default: 30." << std::endl
21 <<
" --record <mode>" << std::endl
22 <<
" Allowed values for mode are:" << std::endl
23 <<
" 0: record all the captures images (continuous mode)," << std::endl
24 <<
" 1: record only images selected by a user click (single shot mode)." << std::endl
25 <<
" Default mode: 0" << std::endl
27 <<
" --no-display" << std::endl
28 <<
" Disable displaying captured images." << std::endl
29 <<
" When used and sequence name specified, record mode is internally set to 1 (continuous mode)."
32 <<
" --help, -h" << std::endl
33 <<
" Print this helper message." << std::endl
35 std::cout <<
"USAGE" << std::endl
36 <<
" Example to visualize images:" << std::endl
37 <<
" " << argv[0] << std::endl
39 <<
" Example to record a sequence of images:" << std::endl
40 <<
" " << argv[0] <<
" --record 0" << std::endl
42 <<
" Example to record single shot images:\n"
43 <<
" " << argv[0] <<
" --record 1" << std::endl
47 std::cout <<
"Error" << std::endl
49 <<
"Unsupported parameter " << argv[
error] << std::endl;
56int main(
int argc,
const char *argv[])
58#if defined(VISP_HAVE_REALSENSE2) && (RS2_API_VERSION > ((2 * 10000) + (31 * 100) + 0)) && defined(VISP_HAVE_THREADS)
59#ifdef ENABLE_VISP_NAMESPACE
62#if (VISP_CXX_STANDARD >= VISP_CXX_STANDARD_11)
63 std::shared_ptr<vpDisplay> display_left;
64 std::shared_ptr<vpDisplay> display_right;
70 std::string opt_seqname_left =
"left-%04d.png", opt_seqname_right =
"right-%04d.png";
71 int opt_record_mode = 0;
73 bool opt_display =
true;
75 for (
int i = 1;
i < argc;
i++) {
76 if (std::string(argv[i]) ==
"--fps" && i + 1 < argc) {
77 opt_fps = std::atoi(argv[++i]);
79 else if (std::string(argv[i]) ==
"--record" && i + 1 < argc) {
80 opt_record_mode = std::atoi(argv[++i]);
82 else if (std::string(argv[i]) ==
"--no-display") {
85 else if (std::string(argv[i]) ==
"--help" || std::string(argv[i]) ==
"-h") {
99 std::cout <<
"Framerate : " << opt_fps << std::endl;
100 std::cout <<
"Display : " << (opt_display ?
"enabled" :
"disabled") << std::endl;
102 std::string text_record_mode =
103 std::string(
"Record mode: ") + (opt_record_mode ? std::string(
"single") : std::string(
"continuous"));
105 std::cout << text_record_mode << std::endl;
106 std::cout <<
"Left record name: " << opt_seqname_left << std::endl;
107 std::cout <<
"Right record name: " << opt_seqname_right << std::endl;
113 config.enable_stream(RS2_STREAM_FISHEYE, 1);
114 config.enable_stream(RS2_STREAM_FISHEYE, 2);
119 std::cout <<
"Image size : " << I_left.
getWidth() <<
" " << I_right.
getHeight() << std::endl;
122#if !(defined(VISP_HAVE_DISPLAY))
123 std::cout <<
"No image viewer is available..." << std::endl;
126#if (VISP_CXX_STANDARD >= VISP_CXX_STANDARD_11)
136 vpImageQueue<unsigned char> image_queue_left(opt_seqname_left, opt_record_mode);
137 vpImageQueue<unsigned char> image_queue_right(opt_seqname_right, opt_record_mode);
152 quit = image_queue_left.record(I_left);
153 quit |= image_queue_right.record(I_right,
nullptr, image_queue_left.getRecordingTrigger(),
true);
155 std::stringstream ss;
161 image_queue_left.cancel();
162 image_queue_right.cancel();
163 image_left_storage_thread.join();
164 image_right_storage_thread.join();
167 std::cout <<
"Catch an exception: " <<
e << std::endl;
170#if (VISP_CXX_STANDARD < VISP_CXX_STANDARD_11)
171 if (display_left !=
nullptr) {
174 if (display_right !=
nullptr) {
175 delete display_right;
181#if !(defined(VISP_HAVE_REALSENSE2) && (RS2_API_VERSION > ((2 * 10000) + (31 * 100) + 0)))
182 std::cout <<
"Install librealsense version > 2.31.0, configure and build ViSP again to use this example" << std::endl;
184#if (VISP_CXX_STANDARD < VISP_CXX_STANDARD_11)
185 std::cout <<
"This tutorial should be built with c++11 support" << std::endl;
Class that defines generic functionalities for display.
static void display(const vpImage< unsigned char > &I)
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.
Definition of the vpImage class member functions.
unsigned int getWidth() const
unsigned int getHeight() const
void acquire(vpImage< unsigned char > &grey, double *ts=nullptr)
bool open(const rs2::config &cfg=rs2::config())
std::shared_ptr< vpDisplay > createDisplay()
Return a smart pointer vpDisplay specialization if a GUI library is available or nullptr otherwise.
vpDisplay * allocateDisplay()
Return a newly allocated vpDisplay specialization if a GUI library is available or nullptr otherwise.
VISP_EXPORT double measureTimeMs()