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>
7#include <visp3/sensor/vpUeyeGrabber.h>
11void usage(
const char *argv[],
int error)
13 std::cout <<
"SYNOPSIS" << std::endl
14 <<
" " << argv[0] <<
" [--device <index>]"
15 <<
" [--config-file <filename.ini>]"
16 <<
" [--fps <auto|fps value like 6|15|30|60>]"
17 <<
" [--gain <auto|value in 0 - 100>]"
18 <<
" [--shutter <auto|exposure value in ms>]"
19 <<
" [--subsample <factor>]"
20 <<
" [--white-balance <value>]"
21 <<
" [--color-mode <mode>]"
22 <<
" [--seqname <sequence name>]"
23 <<
" [--record <mode>]"
25 <<
" [--verbose] [-v]"
26 <<
" [--help] [-h]" << std::endl
28 std::cout <<
"DESCRIPTION" << std::endl
29 <<
" --device <index>" << std::endl
30 <<
" Camera device index. Set 0 to dial with the first camera," << std::endl
31 <<
" and 1 to dial with the second camera attached to the computer." << std::endl
32 <<
" Default: 0" << std::endl
34 <<
" --config-file <filename.ini>" << std::endl
35 <<
" Camera config file." << std::endl
36 <<
" Default: empty." << std::endl
38 <<
" --fps <auto|fps value like 6|15|30|60>" << std::endl
39 <<
" \"Auto\" or a frames per second value." << std::endl
40 <<
" Default: current setting." << std::endl
42 <<
" --gain <auto|value in 0 - 100>" << std::endl
43 <<
" \"Auto\" or manual gain with a value in 0 - 100." << std::endl
44 <<
" Default: current setting." << std::endl
46 <<
" --shutter <auto|manu>" << std::endl
47 <<
" \"Auto\" or manual shutter." << std::endl
48 <<
" Default: current setting." << std::endl
50 <<
" --subsample <factor>" << std::endl
51 <<
" Subsample factor to reduce image size alog rows and columns." << std::endl
52 <<
" Default: 1." << std::endl
54 <<
" --white-balance <value>" << std::endl
55 <<
" Possible values are 0 (disabled) or 1 (enabled)." << std::endl
56 <<
" Default: current setting." << std::endl
58 <<
" --color-mode <mode>" << std::endl
59 <<
" Possible modes are: mono8, rgb24, rgb32, bayer8." << std::endl
60 <<
" Default: current setting." << std::endl
62 <<
" --seqname <sequence name>" << std::endl
63 <<
" Name of the sequence of image to create (ie: /tmp/image%04d.jpg)." << std::endl
64 <<
" Default: empty." << std::endl
66 <<
" --record <mode>" << std::endl
67 <<
" Allowed values for mode are:" << std::endl
68 <<
" 0: record all the captures images (continuous mode)," << std::endl
69 <<
" 1: record only images selected by a user click (single shot mode)." << std::endl
70 <<
" Default mode: 0" << std::endl
72 <<
" --no-display" << std::endl
73 <<
" Disable displaying captured images." << std::endl
74 <<
" When used and sequence name specified, record mode is internally set to 1 (continuous mode)."
77 <<
" --verbose, -v" << std::endl
78 <<
" Enable extra printings." << std::endl
80 <<
" --help, -h" << std::endl
81 <<
" Print this helper message." << std::endl
83 std::cout <<
"USAGE" << std::endl
84 <<
" Example to visualize images:" << std::endl
85 <<
" " << argv[0] << std::endl
87 <<
" Examples to record a sequence of images:" << std::endl
88 <<
" " << argv[0] <<
" --seqname I%04d.png" << std::endl
89 <<
" " << argv[0] <<
" --seqname folder/I%04d.png --record 0" << std::endl
91 <<
" Examples to record single shot images:\n"
92 <<
" " << argv[0] <<
" --seqname I%04d.png --record 1\n"
93 <<
" " << argv[0] <<
" --seqname folder/I%04d.png --record 1" << std::endl
97 std::cout <<
"Error" << std::endl
99 <<
"Unsupported parameter " << argv[error] << std::endl;
108int main(
int argc,
const char *argv[])
110#if defined(VISP_HAVE_UEYE) && (VISP_CXX_STANDARD >= VISP_CXX_STANDARD_11)
112 unsigned int opt_device = 0;
113 std::string opt_seqname;
114 int opt_record_mode = 0;
115 std::string opt_config_file =
"";
116 std::string opt_fps =
"";
117 std::string opt_gain =
"";
118 std::string opt_shutter =
"";
119 std::string opt_color_mode =
"";
120 int opt_white_balance = -1;
121 int opt_subsample = 1;
122 bool opt_verbose =
false;
123 bool opt_display =
true;
125 for (
int i = 1; i < argc; i++) {
126 if (std::string(argv[i]) ==
"--device") {
127 opt_device =
static_cast<unsigned int>(std::atoi(argv[i + 1]));
129 }
else if (std::string(argv[i]) ==
"--config-file") {
130 opt_config_file = std::string(argv[i + 1]);
132 }
else if (std::string(argv[i]) ==
"--fps") {
133 opt_fps = std::string(argv[i + 1]);
135 }
else if (std::string(argv[i]) ==
"--gain") {
136 opt_gain = std::string(argv[i + 1]);
138 }
else if (std::string(argv[i]) ==
"--shutter") {
139 opt_shutter = std::string(argv[i + 1]);
141 }
else if (std::string(argv[i]) ==
"--subsample") {
142 opt_subsample = std::atoi(argv[i + 1]);
144 }
else if (std::string(argv[i]) ==
"--white-balance") {
145 opt_white_balance = std::atoi(argv[i + 1]);
147 }
else if (std::string(argv[i]) ==
"--color-mode") {
148 opt_color_mode = std::string(argv[i + 1]);
150 }
else if (std::string(argv[i]) ==
"--seqname") {
151 opt_seqname = std::string(argv[i + 1]);
153 }
else if (std::string(argv[i]) ==
"--record") {
154 opt_record_mode = std::atoi(argv[i + 1]);
156 }
else if (std::string(argv[i]) ==
"--verbose" || std::string(argv[i]) ==
"-v") {
158 }
else if (std::string(argv[i]) ==
"--help" || std::string(argv[i]) ==
"-h") {
167 if ((!opt_display) && (!opt_seqname.empty())) {
187 if (!cam_ids.size()) {
188 std::cout <<
"No camera detected. Plug a camera and try again..." << std::endl;
191 std::cout <<
"Found " << cam_ids.size() <<
" cameras :" << std::endl;
192 for (
unsigned int i = 0; i < cam_ids.size(); i++) {
193 std::cout << (opt_device == i ?
" * Camera " :
" Camera ") << i <<
" - ID: " << cam_ids[i]
194 <<
" Model: " << cam_models[i] <<
" S/N: " << cam_serials[i] << std::endl;
200 std::cout <<
"Unable to select camera " << opt_device << std::endl;
212 if (!opt_config_file.empty()) {
222 if (opt_subsample > 1) {
223 std::cout <<
"Subsampling factor: " << opt_subsample << std::endl;
229 if (!opt_gain.empty()) {
230 if (opt_gain ==
"auto") {
231 std::cout <<
"Auto gain : " << (g.
setGain(
true) ?
"enabled" :
"N/A") << std::endl;
233 std::cout <<
"Manual gain : "
234 << (g.
setGain(
false, std::atoi(opt_gain.c_str())) ? (std::string(opt_gain) +
" %") :
"N/A")
238 if (!opt_shutter.empty()) {
239 if (opt_shutter ==
"auto") {
240 std::cout <<
"Auto shutter : " << (g.
setExposure(
true) ?
"enabled" :
"N/A") << std::endl;
242 std::cout <<
"Manual shutter : "
243 << (g.
setExposure(
false, std::atof(opt_shutter.c_str())) ? (std::string(opt_shutter) +
" ms") :
"N/A")
248 if (opt_white_balance > 0) {
249 bool wb = (opt_white_balance ? true :
false);
250 std::cout <<
"Subsampling factor: " << opt_subsample << std::endl;
251 std::cout <<
"White balance : " << (wb ?
"auto" :
"disabled") << std::endl;
255 if (!opt_color_mode.empty()) {
257 std::cout <<
"Color mode : " << opt_color_mode << std::endl;
261 if (!opt_fps.empty()) {
262 if (opt_fps ==
"auto") {
263 std::cout <<
"Auto framerate : " << (g.
setFrameRate(
true) ?
"enabled" :
"N/A") << std::endl;
265 std::cout <<
"Manual framerate : "
266 << (g.
setFrameRate(
false, std::atof(opt_fps.c_str())) ? (std::string(opt_fps) +
" Hz") :
"N/A")
271 std::cout <<
"Recording : " << (opt_seqname.empty() ?
"disabled" :
"enabled") << std::endl;
272 std::cout <<
"Display : " << (opt_display ?
"enabled" :
"disabled") << std::endl;
274 std::string text_record_mode =
275 std::string(
"Record mode : ") + (opt_record_mode ? std::string(
"single") : std::string(
"continuous"));
277 if (!opt_seqname.empty()) {
278 std::cout << text_record_mode << std::endl;
279 std::cout <<
"Record name : " << opt_seqname << std::endl;
282 std::cout <<
"Config file : " << (opt_config_file.empty() ?
"empty" : opt_config_file) << std::endl;
283 std::cout <<
"Image size : " << I.
getWidth() <<
" " << I.
getHeight() << std::endl;
287#if !(defined(VISP_HAVE_X11) || defined(VISP_HAVE_GDI) || defined(VISP_HAVE_OPENCV))
288 std::cout <<
"No image viewer is available..." << std::endl;
295#elif defined(VISP_HAVE_GDI)
297#elif defined(HAVE_OPENCV_HIGHGUI)
315 double timestamp_camera = 0, timestamp_camera_prev = 0;
316 std::string timestamp_system;
318 g.
acquire(I, ×tamp_camera, ×tamp_system);
323 quit = image_queue.record(I, ×tamp_system);
326 std::cout <<
"System timestamp: " << timestamp_system << std::endl;
327 std::cout <<
"Camera timestamp diff: " << timestamp_camera - timestamp_camera_prev << std::endl;
328 timestamp_camera_prev = timestamp_camera;
333 std::stringstream ss;
334 ss <<
"Camera framerate: " << fps;
341 image_queue.cancel();
342 image_storage_thread.join();
348 std::cout <<
"Catch an exception: " << e << std::endl;
353#ifndef VISP_HAVE_UEYE
354 std::cout <<
"Install IDS uEye SDK, configure and build ViSP again to use this example" << std::endl;
356#if (VISP_CXX_STANDARD < VISP_CXX_STANDARD_11)
357 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...
Use the X11 console to display images on unix-like OS. Thus to enable this class X11 should be instal...
void init(vpImage< unsigned char > &I, int win_x=-1, int win_y=-1, const std::string &win_title="")
Class that defines generic functionalities for display.
virtual void setDownScalingFactor(unsigned int scale)
static void display(const vpImage< unsigned char > &I)
static void flush(const vpImage< unsigned char > &I)
unsigned int getDownScalingFactor()
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
void resize(unsigned int h, unsigned int w)
resize the image : Image initialization
unsigned int getHeight() const
void open(vpImage< unsigned char > &I)
std::vector< std::string > getCameraSerialNumberList() const
void acquire(vpImage< unsigned char > &I, double *timestamp_camera=NULL, std::string *timestamp_system=NULL)
bool setExposure(bool auto_exposure, double exposure_ms=-1)
bool setFrameRate(bool auto_frame_rate, double manual_frame_rate_hz=-1)
void setWhiteBalance(bool auto_wb)
bool setGain(bool auto_gain, int master_gain=-1, bool gain_boost=false)
double getFramerate() const
void loadParameters(const std::string &filename)
std::vector< std::string > getCameraModelList() const
std::vector< unsigned int > getCameraIDList() const
void setSubsampling(int factor)
unsigned int getFrameHeight() const
unsigned int getFrameWidth() const
bool setActiveCamera(unsigned int cam_index)
bool setColorMode(const std::string &color_mode)
std::string getActiveCameraModel() const
std::string getActiveCameraSerialNumber() const