ZED Open Capture  v0.6.0
Low level camera driver for the ZED stereo camera family
zed_oc_tune_stereo_sgbm.cpp
Go to the documentation of this file.
1 //
3 // Copyright (c) 2021, STEREOLABS.
4 //
5 // All rights reserved.
6 //
7 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
8 // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
9 // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
10 // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
11 // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
12 // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
13 // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
14 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
15 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
16 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
17 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
18 //
20 
21 // ----> Includes
22 #include <iostream>
23 #include <sstream>
24 #include <string>
25 #include <mutex>
26 
27 #include "videocapture.hpp"
28 
29 // OpenCV includes
30 #include <opencv2/opencv.hpp>
31 
32 // Sample includes
33 #include "calibration.hpp"
34 #include "stopwatch.hpp"
35 #include "stereo.hpp"
36 #include "ocv_display.hpp"
37 // <---- Includes
38 
39 // ----> MACROS
40 #define USE_HALF_SIZE_DISPARITY
41 // <---- MACROS
42 
43 // ----> Global variables
45 
46 std::string preFiltDispWinName = "Pre-filtered disparity";
47 
49 
50 cv::Ptr<cv::StereoSGBM> left_matcher;
51 
53 int maxMaxDisp=0;
54 
55 bool params_initialized=false;
56 // <---- Global variables
57 
58 // ----> Global functions
59 void applyStereoMatching();
60 
61 void on_trackbar_block_size( int newBlockSize, void* );
62 void on_trackbar_min_disparities( int newMinDisparities, void* );
63 void on_trackbar_num_disparities( int newNumDisparities, void* );
64 void on_trackbar_mode( int newMode, void* );
65 void on_trackbar_disp12MaxDiff(int newDisp12MaxDiff, void* );
66 void on_trackbar_preFilterCap(int newPreFilterCap, void* );
67 void on_trackbar_uniquenessRatio(int newUniquenessRatio, void* );
68 void on_trackbar_speckleWindowSize(int newSpeckleWindowSize, void* );
69 void on_trackbar_speckleRange(int newSpeckleRange, void* );
70 // <---- Global functions
71 
72 int main(int argc, char *argv[])
73 {
74  // ----> Silence unused warning
75  (void)argc;
76  (void)argv;
77  // <---- Silence unused warning
78 
80 
81  // ----> Set Video parameters
82 #ifdef EMBEDDED_ARM
84 #else
86 #endif
88  params.verbose = verbose;
89  // <---- Set Video parameters
90 
91  // ----> Create Video Capture
93  if( !cap.initializeVideo(-1) )
94  {
95  std::cerr << "Cannot open camera video capture" << std::endl;
96  std::cerr << "See verbosity level for more details." << std::endl;
97 
98  return EXIT_FAILURE;
99  }
100  int sn = cap.getSerialNumber();
101  std::cout << "Connected to camera sn: " << sn << std::endl;
102  // <---- Create Video Capture
103 
104  // ----> Retrieve calibration file from Stereolabs server
105  std::string calibration_file;
106  // ZED Calibration
107  unsigned int serial_number = sn;
108  // Download camera calibration file
109  if( !sl_oc::tools::downloadCalibrationFile(serial_number, calibration_file) )
110  {
111  std::cerr << "Could not load calibration file from Stereolabs servers" << std::endl;
112  return EXIT_FAILURE;
113  }
114  std::cout << "Calibration file found. Loading..." << std::endl;
115 
116  // ----> Frame size
117  int w,h;
118  cap.getFrameSize(w,h);
119  // <---- Frame size
120 
121  // ----> Initialize calibration
122  cv::Mat map_left_x, map_left_y;
123  cv::Mat map_right_x, map_right_y;
124  cv::Mat cameraMatrix_left, cameraMatrix_right;
125  sl_oc::tools::initCalibration(calibration_file, cv::Size(w/2,h), map_left_x, map_left_y, map_right_x, map_right_y,
126  cameraMatrix_left, cameraMatrix_right);
127 
128  std::cout << " Camera Matrix L: \n" << cameraMatrix_left << std::endl << std::endl;
129  std::cout << " Camera Matrix R: \n" << cameraMatrix_right << std::endl << std::endl;
130  // <---- Initialize calibration
131 
132  // Grab first valid frame couple
133  while (1)
134  {
135  // Get a new frame from camera
136  const sl_oc::video::Frame frame = cap.getLastFrame();
137 
138  // ----> If the frame is valid we can convert, rectify and display it
139  if(frame.data!=nullptr)
140  {
141  // ----> Conversion from YUV 4:2:2 to BGR for visualization
142  frameYUV = cv::Mat( frame.height, frame.width, CV_8UC2, frame.data );
143  cv::cvtColor(frameYUV,frameBGR,cv::COLOR_YUV2BGR_YUYV);
144  // <---- Conversion from YUV 4:2:2 to BGR for visualization
145 
146  // ----> Extract left and right images from side-by-side
147  left_raw = frameBGR(cv::Rect(0, 0, frameBGR.cols / 2, frameBGR.rows));
148  right_raw = frameBGR(cv::Rect(frameBGR.cols / 2, 0, frameBGR.cols / 2, frameBGR.rows));
149  // <---- Extract left and right images from side-by-side
150 
151  // ----> Apply rectification
152  cv::remap(left_raw, left_rect, map_left_x, map_left_y, cv::INTER_LINEAR );
153  cv::remap(right_raw, right_rect, map_right_x, map_right_y, cv::INTER_LINEAR );
154 
155  sl_oc::tools::showImage("Right rect.", right_rect, params.res);
157  // <---- Apply rectification
158 
159  break;
160  }
161 
162  cv::waitKey(10);
163  }
164 
165  // ----> Create tune GUI
166  maxMaxDisp = right_rect.cols;
167 #ifdef USE_HALF_SIZE_DISPARITY
168  maxMaxDisp/=2;
169 #endif
170 
171  cv::namedWindow(preFiltDispWinName, cv::WINDOW_AUTOSIZE); // Create Window
172 
173  cv::createTrackbar( "blockSize", preFiltDispWinName, nullptr, 255, on_trackbar_block_size );
174  cv::setTrackbarMin( "blockSize", preFiltDispWinName, 1 );
175 
176  cv::createTrackbar( "numDisparities", preFiltDispWinName, nullptr, maxMaxDisp, on_trackbar_num_disparities );
177  cv::setTrackbarMin( "numDisparities", preFiltDispWinName, 16 );
178 
179  cv::createTrackbar( "minDisparity", preFiltDispWinName, nullptr, maxMaxDisp-16, on_trackbar_min_disparities );
180  cv::setTrackbarMin( "minDisparity", preFiltDispWinName, -maxMaxDisp );
181 
182  cv::createTrackbar( "mode", preFiltDispWinName, nullptr, 3, on_trackbar_mode);
183  cv::setTrackbarMin( "mode", preFiltDispWinName, 0 );
184 
185  cv::createTrackbar( "disp12MaxDiff", preFiltDispWinName, nullptr, maxMaxDisp, on_trackbar_disp12MaxDiff);
186  cv::setTrackbarMin( "disp12MaxDiff", preFiltDispWinName, -1 );
187 
188  cv::createTrackbar( "preFilterCap", preFiltDispWinName, nullptr, 1024, on_trackbar_preFilterCap);
189  cv::setTrackbarMin( "preFilterCap", preFiltDispWinName, 0 );
190 
191  cv::createTrackbar( "uniquenessRatio", preFiltDispWinName, nullptr, 99, on_trackbar_uniquenessRatio);
192  cv::setTrackbarMin( "uniquenessRatio", preFiltDispWinName, 0 );
193 
194  cv::createTrackbar( "speckleWindowSize", preFiltDispWinName, nullptr, 255, on_trackbar_speckleWindowSize);
195  cv::setTrackbarMin( "speckleWindowSize", preFiltDispWinName, 0 );
196 
197  cv::createTrackbar( "speckleRange", preFiltDispWinName, nullptr, 16, on_trackbar_speckleRange);
198  cv::setTrackbarMin( "speckleRange", preFiltDispWinName, 1 );
199 
200  // <---- Create tune GUI
201 
202  // ----> Stereo matcher initialization
203  stereoPar.load();
204 
206  left_matcher->setMinDisparity(stereoPar.minDisparity);
207  left_matcher->setNumDisparities(stereoPar.numDisparities);
208  left_matcher->setBlockSize(stereoPar.blockSize);
209  left_matcher->setP1(stereoPar.P1);
210  left_matcher->setP2(stereoPar.P2);
211  left_matcher->setDisp12MaxDiff(stereoPar.disp12MaxDiff);
212  left_matcher->setMode(stereoPar.mode);
213  left_matcher->setPreFilterCap(stereoPar.preFilterCap);
214  left_matcher->setUniquenessRatio(stereoPar.uniquenessRatio);
215  left_matcher->setSpeckleWindowSize(stereoPar.speckleWindowSize);
216  left_matcher->setSpeckleRange(stereoPar.speckleRange);
217 
218  stereoPar.print();
219 
220  params_initialized=true;
221  // <---- Stereo matcher initialization
222 
223  // ----> Update GUI value
224  cv::setTrackbarPos( "blockSize", preFiltDispWinName, stereoPar.blockSize );
225  cv::setTrackbarPos( "numDisparities", preFiltDispWinName, stereoPar.numDisparities );
226  cv::setTrackbarPos( "minDisparity", preFiltDispWinName, stereoPar.minDisparity );
227  cv::setTrackbarPos( "mode", preFiltDispWinName, stereoPar.mode );
228  cv::setTrackbarPos( "disp12MaxDiff", preFiltDispWinName, stereoPar.disp12MaxDiff );
229  cv::setTrackbarPos( "preFilterCap", preFiltDispWinName, stereoPar.preFilterCap );
230  cv::setTrackbarPos( "uniquenessRatio", preFiltDispWinName, stereoPar.uniquenessRatio );
231  cv::setTrackbarPos( "speckleWindowSize", preFiltDispWinName, stereoPar.speckleWindowSize );
232  cv::setTrackbarPos( "speckleRange", preFiltDispWinName, stereoPar.speckleRange );
233  // <---- Update GUI value
234 
236 
237  while(1)
238  {
239  // ----> Keyboard handling
240  int key = cv::waitKey( 5 );
241  if(key=='q' || key==27) // Quit
242  {
243  std::cout << "Save current stereo parameters? [Y/N]" << std::endl;
244  key = cv::waitKey(-1);
245  if(key=='Y' || key=='y')
246  {
247  stereoPar.save();
248  }
249  break;
250  }
251  if(key=='l' || key=='L') // load parameters)
252  {
253  if(stereoPar.load())
254  {
255  left_matcher->setMinDisparity(stereoPar.minDisparity);
256  left_matcher->setNumDisparities(stereoPar.numDisparities);
257  left_matcher->setBlockSize(stereoPar.blockSize);
258  left_matcher->setP1(stereoPar.P1);
259  left_matcher->setP2(stereoPar.P2);
260  left_matcher->setDisp12MaxDiff(-(stereoPar.disp12MaxDiff-1));
261  left_matcher->setMode(stereoPar.mode);
262  left_matcher->setPreFilterCap(stereoPar.preFilterCap);
263  left_matcher->setUniquenessRatio(stereoPar.uniquenessRatio);
264  left_matcher->setSpeckleWindowSize(stereoPar.speckleWindowSize);
265  left_matcher->setSpeckleRange(stereoPar.speckleRange);
266 
267  // ----> Update GUI value
268  cv::setTrackbarPos( "blockSize", preFiltDispWinName, stereoPar.blockSize );
269  cv::setTrackbarPos( "numDisparities", preFiltDispWinName, stereoPar.numDisparities );
270  cv::setTrackbarPos( "minDisparity", preFiltDispWinName, stereoPar.minDisparity );
271  cv::setTrackbarPos( "mode", preFiltDispWinName, stereoPar.mode );
272  cv::setTrackbarPos( "disp12MaxDiff", preFiltDispWinName, stereoPar.disp12MaxDiff );
273  cv::setTrackbarPos( "preFilterCap", preFiltDispWinName, stereoPar.preFilterCap );
274  cv::setTrackbarPos( "uniquenessRatio", preFiltDispWinName, stereoPar.uniquenessRatio );
275  cv::setTrackbarPos( "speckleWindowSize", preFiltDispWinName, stereoPar.speckleWindowSize );
276  cv::setTrackbarPos( "speckleRange", preFiltDispWinName, stereoPar.speckleRange );
277  // <---- Update GUI value
278 
280  }
281  }
282 
283  if(key=='s' || key=='S') // load parameters
284  {
285  stereoPar.save();
286  }
287 
288  if(key=='r' || key=='R') // reset default parameters
289  {
291  // ----> Update GUI value
292  cv::setTrackbarPos( "blockSize", preFiltDispWinName, stereoPar.blockSize );
293  cv::setTrackbarPos( "numDisparities", preFiltDispWinName, stereoPar.numDisparities );
294  cv::setTrackbarPos( "minDisparity", preFiltDispWinName, stereoPar.minDisparity );
295  cv::setTrackbarPos( "mode", preFiltDispWinName, stereoPar.mode );
296  cv::setTrackbarPos( "disp12MaxDiff", preFiltDispWinName, stereoPar.disp12MaxDiff );
297  cv::setTrackbarPos( "preFilterCap", preFiltDispWinName, stereoPar.preFilterCap );
298  cv::setTrackbarPos( "uniquenessRatio", preFiltDispWinName, stereoPar.uniquenessRatio );
299  cv::setTrackbarPos( "speckleWindowSize", preFiltDispWinName, stereoPar.speckleWindowSize );
300  cv::setTrackbarPos( "speckleRange", preFiltDispWinName, stereoPar.speckleRange );
301  // <---- Update GUI value
303  }
304 
305  // <---- Keyboard handling
306  }
307 
308  return EXIT_SUCCESS;
309 }
310 
312 {
313  if(!params_initialized)
314  return;
315 
316  // ----> Stereo matching
317  sl_oc::tools::StopWatch stereo_clock;
318 
319 #ifdef USE_HALF_SIZE_DISPARITY
320  cv::resize(left_rect, left_for_matcher, cv::Size(), 0.5, 0.5, cv::INTER_AREA);
321  cv::resize(right_rect, right_for_matcher, cv::Size(), 0.5, 0.5, cv::INTER_AREA);
322 #else
323  left_for_matcher = left_rect.clone();
324  right_for_matcher = right_rect.clone();
325 #endif
326 
327  left_matcher->setMinDisparity(stereoPar.minDisparity);
328  left_matcher->setNumDisparities(stereoPar.numDisparities);
329  left_matcher->setBlockSize(stereoPar.blockSize);
330  left_matcher->setP1(stereoPar.P1);
331  left_matcher->setP2(stereoPar.P2);
332  left_matcher->setDisp12MaxDiff(stereoPar.disp12MaxDiff);
333  left_matcher->setMode(stereoPar.mode);
334  left_matcher->setPreFilterCap(stereoPar.preFilterCap);
335  left_matcher->setUniquenessRatio(stereoPar.uniquenessRatio);
336  left_matcher->setSpeckleWindowSize(stereoPar.speckleWindowSize);
337  left_matcher->setSpeckleRange(stereoPar.speckleRange);
338 #ifdef USE_HALF_SIZE_DISPARITY
339  left_disp*=2;
340 #endif
341 
342  std::cout << "Start stereo matching..." << std::endl;
344  std::cout << "... finished stereo matching" << std::endl;
345 
346  double elapsed = stereo_clock.toc();
347  std::cout << "Stereo processing: " << elapsed << " sec - Freq: " << 1./elapsed << std::endl;
348  // <---- Stereo matching
349 
350  // ----> Show disparity
351  //cv::ximgproc::getDisparityVis(left_disp,left_disp_vis,3.0);
352  cv::normalize(left_disp, left_disp_vis, 0, 255, cv::NORM_MINMAX, CV_8UC1);
353 #ifdef USE_HALF_SIZE_DISPARITY
354  cv::resize(left_disp_vis, left_disp_vis, cv::Size(), 2.0, 2.0, cv::INTER_AREA);
355 #endif
357  // <---- Show disparity
358 }
359 
360 
361 void on_trackbar_block_size( int newBlockSize, void* )
362 {
363  bool fixed = false;
364  if(newBlockSize==stereoPar.blockSize)
365  return;
366 
367  if(newBlockSize%2!=1)
368  {
369  if(newBlockSize>stereoPar.blockSize)
370  ++newBlockSize;
371  else
372  --newBlockSize;
373  fixed=true;
374  }
375  if(newBlockSize<1)
376  {
377  newBlockSize=1;
378  fixed=true;
379  }
380  if(newBlockSize>255)
381  {
382  newBlockSize=255;
383  fixed=true;
384  }
385 
386  stereoPar.blockSize = newBlockSize;
389 
390  if(fixed)
391  {
392  cv::setTrackbarPos("blockSize", preFiltDispWinName, newBlockSize);
393  }
394 
395  std::cout << "New 'blockSize' value: " << stereoPar.blockSize << std::endl;
397 }
398 
399 void on_trackbar_min_disparities( int newMinDisparities, void* )
400 {
401  if(newMinDisparities==stereoPar.minDisparity)
402  return;
403 
404  stereoPar.minDisparity = newMinDisparities;
405 
407  {
409  cv::setTrackbarPos("numDisparities", preFiltDispWinName, newNumDisparities);
410  std::cout << "New 'numDisparities' value: " << stereoPar.numDisparities << std::endl;
411  }
412 
413  std::cout << "New 'minDisparity' value: " << stereoPar.minDisparity << std::endl;
415 }
416 
417 void on_trackbar_num_disparities( int newNumDisparities, void* )
418 {
419  bool fixed = false;
420  if(newNumDisparities==stereoPar.numDisparities)
421  return;
422 
423  if(newNumDisparities%16!=0)
424  {
425  if(newNumDisparities<stereoPar.numDisparities)
426  newNumDisparities = newNumDisparities/16;
427  else
428  newNumDisparities = newNumDisparities/16 + 1;
429  newNumDisparities*=16;
430  fixed=true;
431  }
432 
433  stereoPar.numDisparities = newNumDisparities;
434 
435  if(fixed)
436  {
437  cv::setTrackbarPos("numDisparities", preFiltDispWinName, newNumDisparities);
438  }
439 
441  {
443  cv::setTrackbarPos("minDisparity", preFiltDispWinName, newMinDisparity);
444  std::cout << "New 'minDisparity' value: " << stereoPar.minDisparity << std::endl;
445  }
446 
447  std::cout << "New 'numDisparities' value: " << stereoPar.numDisparities << std::endl;
449 }
450 
451 void on_trackbar_mode( int newMode, void* )
452 {
453  if(newMode==stereoPar.mode)
454  return;
455 
456  stereoPar.mode = newMode;
457 
458  std::cout << "New 'mode' value: " << stereoPar.mode << std::endl;
460 }
461 
462 void on_trackbar_disp12MaxDiff (int newDisp12MaxDiff, void* )
463 {
464  if(newDisp12MaxDiff==stereoPar.disp12MaxDiff)
465  return;
466 
467  stereoPar.disp12MaxDiff = newDisp12MaxDiff;
468 
469  std::cout << "New 'disp12MaxDiff' value: " << stereoPar.disp12MaxDiff << std::endl;
471 }
472 
473 void on_trackbar_preFilterCap(int newPreFilterCap, void* )
474 {
475  if(newPreFilterCap==stereoPar.preFilterCap)
476  return;
477 
478  stereoPar.preFilterCap = newPreFilterCap;
479 
480  std::cout << "New 'preFilterCap' value: " << stereoPar.preFilterCap << std::endl;
482 }
483 
484 void on_trackbar_uniquenessRatio(int newUniquenessRatio, void* )
485 {
486  if(newUniquenessRatio==stereoPar.uniquenessRatio)
487  return;
488 
489  stereoPar.uniquenessRatio = newUniquenessRatio;
490 
491  std::cout << "New 'uniquenessRatio' value: " << stereoPar.uniquenessRatio << std::endl;
493 }
494 
495 void on_trackbar_speckleWindowSize(int newSpeckleWindowSize, void* )
496 {
497  if(newSpeckleWindowSize==stereoPar.speckleWindowSize)
498  return;
499 
500  stereoPar.speckleWindowSize = newSpeckleWindowSize;
501 
502  std::cout << "New 'speckleWindowSize' value: " << stereoPar.speckleWindowSize << std::endl;
504 }
505 
506 void on_trackbar_speckleRange(int newSpeckleRange, void* )
507 {
508  if(newSpeckleRange==stereoPar.speckleRange)
509  return;
510 
511  stereoPar.speckleRange = newSpeckleRange;
512 
513  std::cout << "New 'speckleRange' value: " << stereoPar.speckleRange << std::endl;
515 }
The StereoSgbmPar class is used to store/retrieve the stereo matching parameters.
Definition: stereo.hpp:20
int P1
[default: 24*blockSize*blockSize] The first parameter controlling the disparity smoothness....
Definition: stereo.hpp:57
int disp12MaxDiff
[default: 96] Maximum allowed difference (in integer pixel units) in the left-right disparity check....
Definition: stereo.hpp:59
int speckleWindowSize
[default: 255] Maximum size of smooth disparity regions to consider their noise speckles and invalida...
Definition: stereo.hpp:62
int uniquenessRatio
[default: 5] Margin in percentage by which the best (minimum) computed cost function value should "wi...
Definition: stereo.hpp:61
int minDisparity
[default: 0] Minimum possible disparity value. Normally, it is zero but sometimes rectification algor...
Definition: stereo.hpp:54
void setDefaultValues()
set default stereo matching parameters
Definition: stereo.hpp:69
bool save()
save stereo matching parameters
Definition: stereo.hpp:120
bool load()
load stereo matching parameters
Definition: stereo.hpp:87
int numDisparities
[default: 96] Maximum disparity minus minimum disparity. The value is always greater than zero....
Definition: stereo.hpp:55
int mode
Set it to StereoSGBM::MODE_HH to run the full-scale two-pass dynamic programming algorithm....
Definition: stereo.hpp:56
int speckleRange
[default: 1] Maximum disparity variation within each connected component. If you do speckle filtering...
Definition: stereo.hpp:63
int blockSize
[default: 3] Matched block size. It must be an odd number >=1 . Normally, it should be somewhere in t...
Definition: stereo.hpp:53
void print()
print the current stereo matching parameters on standard output
Definition: stereo.hpp:150
int preFilterCap
[default: 63] Truncation value for the prefiltered image pixels. The algorithm first computes x-deriv...
Definition: stereo.hpp:60
int P2
[default: 4*PI]The second parameter controlling the disparity smoothness. The larger the values are,...
Definition: stereo.hpp:58
Stop Timer used to measure time intervals.
Definition: stopwatch.hpp:34
double toc()
Calculates the seconds elapsed from the last tic.
Definition: stopwatch.hpp:55
The VideoCapture class provides image grabbing functions and settings control for all the Stereolabs ...
const Frame & getLastFrame(uint64_t timeout_msec=100)
Get the last received camera image.
void getFrameSize(int &width, int &height)
Get the size of the camera frame.
bool initializeVideo(int devId=-1)
Open a ZED camera using the specified ID or searching for the first available.
int getSerialNumber()
Retrieve the serial number of the connected camera.
bool initCalibration(std::string calibration_file, cv::Size2i image_size, cv::Mat &map_left_x, cv::Mat &map_left_y, cv::Mat &map_right_x, cv::Mat &map_right_y, cv::Mat &cameraMatrix_left, cv::Mat &cameraMatrix_right, double *baseline=nullptr)
void showImage(std::string name, cv::UMat &img, sl_oc::video::RESOLUTION res, bool change_name=true, std::string info="")
Rescale the OpenCV T-API images [cv::UMat] according to the selected resolution to better display the...
Definition: ocv_display.hpp:27
bool downloadCalibrationFile(unsigned int serial_number, std::string &calibration_file)
@ FPS_30
30 Frames per second. Not available for RESOLUTION::HD2K.
VERBOSITY
Definition: defines.hpp:85
@ INFO
Definition: defines.hpp:89
The Frame struct containing the acquired video frames.
uint16_t height
Frame height.
uint16_t width
Frame width.
uint8_t * data
Frame data in YUV 4:2:2 format.
The camera configuration parameters.
RESOLUTION res
Camera resolution.
FPS fps
Frames per second.
cv::Mat left_raw
int main(int argc, char *argv[])
sl_oc::tools::StereoSgbmPar stereoPar
std::string preFiltDispWinName
void on_trackbar_mode(int newMode, void *)
cv::Mat frameBGR
cv::Mat left_for_matcher
void on_trackbar_speckleRange(int newSpeckleRange, void *)
void on_trackbar_num_disparities(int newNumDisparities, void *)
sl_oc::video::VideoParams params
cv::Mat right_raw
void applyStereoMatching()
bool params_initialized
cv::Mat right_for_matcher
void on_trackbar_min_disparities(int newMinDisparities, void *)
void on_trackbar_preFilterCap(int newPreFilterCap, void *)
void on_trackbar_disp12MaxDiff(int newDisp12MaxDiff, void *)
cv::Mat left_disp_vis
cv::Mat frameYUV
void on_trackbar_block_size(int newBlockSize, void *)
cv::Mat left_rect
void on_trackbar_uniquenessRatio(int newUniquenessRatio, void *)
void on_trackbar_speckleWindowSize(int newSpeckleWindowSize, void *)
cv::Mat left_disp
cv::Mat right_rect
cv::Ptr< cv::StereoSGBM > left_matcher