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) && (VISP_CXX_STANDARD >= VISP_CXX_STANDARD_11)
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]);
87 }
else if (std::string(argv[i]) ==
"--record") {
88 opt_record_mode = std::atoi(argv[i + 1]);
90 }
else if (std::string(argv[i]) ==
"--ip" && i + 1 < argc) {
91 ip_address = std::string(argv[i + 1]);
93 }
else if (std::string(argv[i]) ==
"--hd-resolution") {
95 }
else if (std::string(argv[i]) ==
"--no-display") {
97 }
else if (std::string(argv[i]) ==
"--help" || std::string(argv[i]) ==
"-h") {
106 if ((!opt_display) && (!opt_seqname.empty())) {
110 std::cout <<
"Recording : " << (opt_seqname.empty() ?
"disabled" :
"enabled") << std::endl;
111 std::cout <<
"Display : " << (opt_display ?
"enabled" :
"disabled") << std::endl;
113 std::string text_record_mode =
114 std::string(
"Record mode: ") + (opt_record_mode ? std::string(
"single") : std::string(
"continuous"));
116 if (!opt_seqname.empty()) {
117 std::cout << text_record_mode << std::endl;
118 std::cout <<
"Record name: " << opt_seqname << std::endl;
120 std::cout <<
"Image resolution : " << (image_res == 0 ?
"480p." :
"720p.") << std::endl << std::endl;
126 if (drone.isRunning()) {
128 drone.setVideoResolution(image_res);
130 drone.startStreaming();
131 drone.setExposure(1.5f);
132 drone.getRGBaImage(I);
134 std::cout <<
"Error : failed to setup drone control" << std::endl;
138 std::cout <<
"Image size : " << I.
getWidth() <<
" " << I.
getHeight() << std::endl;
142 #if !(defined(VISP_HAVE_X11) || defined(VISP_HAVE_GDI) || defined(VISP_HAVE_OPENCV))
143 std::cout <<
"No image viewer is available..." << std::endl;
150 #elif defined(VISP_HAVE_GDI)
152 #elif defined(HAVE_OPENCV_HIGHGUI)
164 drone.getRGBaImage(I);
168 quit = image_queue.record(I);
170 std::stringstream ss;
175 image_queue.cancel();
176 image_storage_thread.join();
182 std::cout <<
"Caught an exception: " << e << std::endl;
187 #ifndef VISP_HAVE_ARSDK
188 std::cout <<
"Install Parrot ARSDK3, configure and build ViSP again to use this example" << std::endl;
190 #ifndef VISP_HAVE_FFMPEG
191 std::cout <<
"Install ffmpeg, configure and build ViSP again to use this example" << std::endl;
193 #if (VISP_CXX_STANDARD < VISP_CXX_STANDARD_11)
194 std::cout <<
"This tutorial should be built with c++11 support" << std::endl;
199 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()