2 #include <visp3/core/vpConfig.h>
3 #include <visp3/core/vpImage.h>
4 #include <visp3/gui/vpDisplayGDI.h>
5 #include <visp3/gui/vpDisplayOpenCV.h>
6 #include <visp3/gui/vpDisplayX.h>
7 #include <visp3/io/vpImageStorageWorker.h>
8 #include <visp3/sensor/vpOccipitalStructure.h>
10 void usage(
const char *argv[],
int error)
12 std::cout <<
"SYNOPSIS" << std::endl
13 <<
" " << argv[0] <<
" [--depth-fps <6|15|30|60>]"
14 <<
" [--depth-fps <6|15|30|60>]"
16 <<
" [--no-frame-sync]"
17 <<
" [--record <mode>]"
19 <<
" [--help] [-h]" << std::endl
21 std::cout <<
"DESCRIPTION" << std::endl
22 <<
" --visible-fps <6|15|30|60>" << std::endl
23 <<
" Visible camera (gray or color) frames per second." << std::endl
24 <<
" Default: 30." << std::endl
26 <<
" --depth-fps <6|15|30|60>" << std::endl
27 <<
" Depth camera frames per second." << std::endl
28 <<
" Default: 30." << std::endl
30 <<
" --sxga" << std::endl
31 <<
" If available, output 1280x960 high resolution depth array." << std::endl
33 <<
" --no-frame-sync" << std::endl
34 <<
" If available, disable frame synchronization." << std::endl
36 <<
" --record <mode>" << std::endl
37 <<
" Allowed values for mode are:" << std::endl
38 <<
" 0: record all the captures images (continuous mode)," << std::endl
39 <<
" 1: record only images selected by a user click (single shot mode)." << std::endl
40 <<
" Default mode: 0" << std::endl
42 <<
" --no-display" << std::endl
43 <<
" Disable displaying captured images." << std::endl
44 <<
" When used and sequence name specified, record mode is internally set to 1 (continuous mode)."
47 <<
" --help, -h" << std::endl
48 <<
" Print this helper message." << std::endl
50 std::cout <<
"USAGE" << std::endl
51 <<
" Example to visualize images:" << std::endl
52 <<
" " << argv[0] << std::endl
54 <<
" Example to record a sequence of images:" << std::endl
55 <<
" " << argv[0] <<
" --record 0" << std::endl
57 <<
" Example to record a sequence of images at different frame rates:" << std::endl
58 <<
" " << argv[0] <<
" --record 0 --depth-fps 15 --visible-fps 10 --no-frame-sync" << std::endl
60 <<
" Example to record single shot images:\n"
61 <<
" " << argv[0] <<
" --record 1" << std::endl
65 std::cout <<
"Error" << std::endl
67 <<
"Unsupported parameter " << argv[error] << std::endl;
74 int main(
int argc,
const char *argv[])
76 #if defined(VISP_HAVE_OCCIPITAL_STRUCTURE) && defined(VISP_HAVE_THREADS)
77 #ifdef ENABLE_VISP_NAMESPACE
81 std::string opt_seqname_visible =
"visible-%04d.png", opt_seqname_depth =
"depth-%04d.png";
82 int opt_record_mode = 0;
83 int opt_depth_fps = 30, opt_visible_fps = opt_depth_fps;
84 bool opt_sxga =
false;
85 bool opt_frame_sync =
true;
86 bool opt_display =
true;
88 for (
int i = 1; i < argc; i++) {
89 if (std::string(argv[i]) ==
"--depth-fps") {
90 opt_depth_fps = std::atoi(argv[i + 1]);
93 else if (std::string(argv[i]) ==
"--visible-fps") {
94 opt_visible_fps = std::atoi(argv[i + 1]);
97 else if (std::string(argv[i]) ==
"--sxga") {
100 else if (std::string(argv[i]) ==
"--no-frame-sync") {
101 opt_frame_sync =
false;
103 else if (std::string(argv[i]) ==
"--record") {
104 opt_record_mode = std::atoi(argv[i + 1]);
107 else if (std::string(argv[i]) ==
"--no-display") {
110 else if (std::string(argv[i]) ==
"--help" || std::string(argv[i]) ==
"-h") {
124 std::cout <<
"Depth framerate : " << opt_depth_fps << std::endl;
125 std::cout <<
"Visible framerate: " << opt_visible_fps << std::endl;
126 std::cout <<
"Display : " << (opt_display ?
"enabled" :
"disabled") << std::endl;
128 std::string text_record_mode =
129 std::string(
"Record mode: ") + (opt_record_mode ? std::string(
"single") : std::string(
"continuous"));
131 std::cout << text_record_mode << std::endl;
132 std::cout <<
"Visible record name: " << opt_seqname_visible << std::endl;
133 std::cout <<
"Depth record name: " << opt_seqname_depth << std::endl;
142 if (opt_visible_fps < 2) {
146 ST::CaptureSessionSettings settings;
147 settings.source = ST::CaptureSessionSourceId::StructureCore;
148 settings.structureCore.visibleEnabled =
true;
149 settings.frameSyncEnabled = opt_frame_sync;
150 settings.structureCore.depthFramerate = opt_depth_fps;
151 settings.structureCore.visibleFramerate = opt_visible_fps;
153 settings.structureCore.depthResolution = ST::StructureCoreDepthResolution::SXGA;
154 settings.applyExpensiveCorrection =
true;
156 bool is_open = g.
open(settings);
165 vpDisplay *display_visible =
nullptr, *display_depth =
nullptr;
167 #if !(defined(VISP_HAVE_X11) || defined(VISP_HAVE_GDI) || defined(VISP_HAVE_OPENCV))
168 std::cout <<
"No image viewer is available..." << std::endl;
174 display_visible =
new vpDisplayX(I_color, 10, 10,
"Visible image");
175 display_depth =
new vpDisplayX(I_depth, 10 + I_color.
getWidth(), 10,
"Depth image");
176 #elif defined(VISP_HAVE_GDI)
177 display_visible =
new vpDisplayGDI(I_color, 10, 10,
"Visible image");
179 #elif defined(HAVE_OPENCV_HIGHGUI)
180 display_visible =
new vpDisplayOpenCV(I_color, 10, 10,
"Visible image");
185 vpImageQueue<vpRGBa> image_queue_visible(opt_seqname_visible, opt_record_mode);
186 std::thread image_visible_storage_thread;
191 vpImageQueue<vpRGBa> image_queue_depth(opt_seqname_depth, opt_record_mode);
206 quit = image_queue_visible.record(I_color);
207 quit |= image_queue_depth.record(I_depth,
nullptr, image_queue_visible.getRecordingTrigger(),
true);
209 std::stringstream ss;
215 image_queue_visible.cancel();
216 image_queue_depth.cancel();
217 image_visible_storage_thread.join();
218 image_depth_storage_thread.join();
220 if (display_visible) {
221 delete display_visible;
224 delete display_depth;
229 std::cout <<
"Catch an exception: " << e << std::endl;
234 #if !(defined(VISP_HAVE_OCCIPITAL_STRUCTURE))
235 std::cout <<
"Install libStructure, configure and build ViSP again to use this example" << std::endl;
237 #if (VISP_CXX_STANDARD < VISP_CXX_STANDARD_11)
238 std::cout <<
"This tutorial should be built with c++11 support" << std::endl;
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...
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.
static void createDepthHistogram(const vpImage< uint16_t > &src_depth, vpImage< vpRGBa > &dest_rgba)
unsigned int getWidth() const
Type * bitmap
points toward the bitmap
unsigned int getHeight() const
unsigned int getHeight(vpOccipitalStructureStream stream_type)
void acquire(vpImage< unsigned char > &gray, bool undistorted=false, double *ts=nullptr)
unsigned int getWidth(vpOccipitalStructureStream stream_type)
bool open(const ST::CaptureSessionSettings &settings)
VISP_EXPORT int wait(double t0, double t)
VISP_EXPORT double measureTimeMs()