2 #include <visp3/core/vpImage.h>
3 #include <visp3/gui/vpDisplayGDI.h>
4 #include <visp3/gui/vpDisplayOpenCV.h>
5 #include <visp3/gui/vpDisplayX.h>
6 #include <visp3/io/vpImageStorageWorker.h>
8 #ifdef VISP_HAVE_MODULE_ROBOT
9 #include <visp3/robot/vpRobotBebop2.h>
11 void usage(
const char *argv[],
int error)
13 std::cout <<
"SYNOPSIS" << std::endl
14 <<
" " << argv[0] <<
" [--ip <address>]"
15 <<
" [--hd-resolution]"
16 <<
" [--seqname <sequence name>]"
17 <<
" [--record <mode>]"
19 <<
" [--help] [-h]" << std::endl
21 std::cout <<
"DESCRIPTION" << std::endl
22 <<
" --ip <address>" << std::endl
23 <<
" IP address of the drone to which you want to connect." << std::endl
24 <<
" Default: 192.168.42.1" << std::endl
26 <<
" --hd-resolution" << std::endl
27 <<
" Enables HD 720p images instead of default 480p." << std::endl
28 <<
" Caution : The camera settings are different depending on whether the resolution is 720p or 480p."
31 <<
" --seqname <sequence name>" << std::endl
32 <<
" Name of the sequence of image to create (ie: /tmp/image%04d.jpg)." << std::endl
33 <<
" Default: empty." << std::endl
35 <<
" --record <mode>" << std::endl
36 <<
" Allowed values for mode are:" << std::endl
37 <<
" 0: record all the captures images (continuous mode)," << std::endl
38 <<
" 1: record only images selected by a user click (single shot mode)." << std::endl
39 <<
" Default mode: 0" << std::endl
41 <<
" --no-display" << std::endl
42 <<
" Disable displaying captured images." << std::endl
43 <<
" When used and sequence name specified, record mode is internally set to 1 (continuous mode)."
46 <<
" --help, -h" << std::endl
47 <<
" Print this helper message." << std::endl
49 std::cout <<
"USAGE" << std::endl
50 <<
" Example to visualize images:" << std::endl
51 <<
" " << argv[0] << std::endl
53 <<
" Examples to record a sequence of 720p images from drone with ip different from default:" << std::endl
54 <<
" " << argv[0] <<
" --seqname I%04d.png --ip 192.168.42.3 --hd_resolution" << std::endl
55 <<
" " << argv[0] <<
" --seqname folder/I%04d.png --record 0 --ip 192.168.42.3 --hd-resolution"
58 <<
" Examples to record single shot images:" << std::endl
59 <<
" " << argv[0] <<
" --seqname I%04d.png --record 1" << std::endl
60 <<
" " << argv[0] <<
" --seqname folder/I%04d.png --record 1" << std::endl
64 std::cout <<
"Error" << std::endl
66 <<
"Unsupported parameter " << argv[error] << std::endl;
73 int main(
int argc,
const char **argv)
75 #if defined(VISP_HAVE_ARSDK) && defined(VISP_HAVE_FFMPEG) && defined(VISP_HAVE_THREADS)
77 std::string opt_seqname;
78 int opt_record_mode = 0;
80 std::string ip_address =
"192.168.42.1";
81 bool opt_display =
true;
83 for (
int i = 1; i < argc; i++) {
84 if (std::string(argv[i]) ==
"--seqname") {
85 opt_seqname = std::string(argv[i + 1]);
88 else if (std::string(argv[i]) ==
"--record") {
89 opt_record_mode = std::atoi(argv[i + 1]);
92 else if (std::string(argv[i]) ==
"--ip" && i + 1 < argc) {
93 ip_address = std::string(argv[i + 1]);
96 else if (std::string(argv[i]) ==
"--hd-resolution") {
99 else if (std::string(argv[i]) ==
"--no-display") {
102 else if (std::string(argv[i]) ==
"--help" || std::string(argv[i]) ==
"-h") {
112 if ((!opt_display) && (!opt_seqname.empty())) {
116 std::cout <<
"Recording : " << (opt_seqname.empty() ?
"disabled" :
"enabled") << std::endl;
117 std::cout <<
"Display : " << (opt_display ?
"enabled" :
"disabled") << std::endl;
119 std::string text_record_mode =
120 std::string(
"Record mode: ") + (opt_record_mode ? std::string(
"single") : std::string(
"continuous"));
122 if (!opt_seqname.empty()) {
123 std::cout << text_record_mode << std::endl;
124 std::cout <<
"Record name: " << opt_seqname << std::endl;
126 std::cout <<
"Image resolution : " << (image_res == 0 ?
"480p." :
"720p.") << std::endl << std::endl;
132 if (drone.isRunning()) {
134 drone.setVideoResolution(image_res);
136 drone.startStreaming();
137 drone.setExposure(1.5f);
138 drone.getRGBaImage(I);
141 std::cout <<
"Error : failed to setup drone control" << std::endl;
145 std::cout <<
"Image size : " << I.
getWidth() <<
" " << I.
getHeight() << std::endl;
149 #if !(defined(VISP_HAVE_X11) || defined(VISP_HAVE_GDI) || defined(VISP_HAVE_OPENCV))
150 std::cout <<
"No image viewer is available..." << std::endl;
157 #elif defined(VISP_HAVE_GDI)
159 #elif defined(HAVE_OPENCV_HIGHGUI)
171 drone.getRGBaImage(I);
175 quit = image_queue.record(I);
177 std::stringstream ss;
182 image_queue.cancel();
183 image_storage_thread.join();
190 std::cout <<
"Caught an exception: " << e << std::endl;
195 #ifndef VISP_HAVE_ARSDK
196 std::cout <<
"Install Parrot ARSDK3, configure and build ViSP again to use this example" << std::endl;
198 #ifndef VISP_HAVE_FFMPEG
199 std::cout <<
"Install ffmpeg, configure and build ViSP again to use this example" << std::endl;
201 #if (VISP_CXX_STANDARD < VISP_CXX_STANDARD_11)
202 std::cout <<
"This tutorial should be built with c++11 support" << std::endl;
207 int main() { std::cout <<
"This tutorial needs visp_robot module that is not built." << 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...
Use the X11 console to display images on unix-like OS. Thus to enable this class X11 should be instal...
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.
unsigned int getWidth() const
unsigned int getHeight() const
VISP_EXPORT double measureTimeMs()