licornea_tools
viewer.h
Go to the documentation of this file.
1 #ifndef LICORNEA_VIEWER_H_
2 #define LICORNEA_VIEWER_H_
3 
4 #include "common.h"
5 #include "opencv.h"
6 #include <string>
7 #include <memory>
8 #include <vector>
9 #include <functional>
10 
11 namespace tlz {
12 
13 class viewer {
14 public:
15  class slider_base;
16  class int_slider;
17  class real_slider;
18 
23  };
24 
25 private:
26  std::string window_name_;
27  std::vector<std::unique_ptr<slider_base>> sliders_;
28  cv::Mat_<cv::Vec3b> shown_image_;
29  bool running_modal_ = false;
30 
31  static std::string get_window_name_(const std::string& title = std::string());
32 
33 public:
34  cv::Vec3b black = cv::Vec3b(0, 0, 0);
35  cv::Vec3b white = cv::Vec3b(255, 255, 255);
36  cv::Vec3b indicator_color = cv::Vec3b(255, 100, 100);
37  cv::Vec3b background_color = cv::Vec3b(0, 0, 0);
38  cv::Vec3b text_color = cv::Vec3b(255, 255, 255);
39 
40  std::function<void()> update_callback;
41  std::function<void(int keycode)> key_callback;
42  std::function<void(int event, int x, int y)> mouse_callback;
43 
44  viewer(const std::string& title, int width, int height, bool resizeable = false);
45  viewer(const std::string& title, cv::Size sz, bool resizeable = false) :
46  viewer(title, sz.width, sz.height, resizeable) { }
47  viewer(int width, int height, bool resizeable = false);
48  viewer(cv::Size sz, bool resizeable = false) :
49  viewer(sz.width, sz.height, resizeable) { }
50  explicit viewer(const std::string& title, bool resizeable = false);
51 
52  viewer(const viewer&) = delete;
53  ~viewer();
54  viewer& operator=(const viewer&) = delete;
55 
56  int_slider& add_int_slider(const std::string& caption, int default_val, int min_val, int max_val, int step = 1);
57  real_slider& add_real_slider(const std::string& caption, real default_val, real min_val, real max_val, int steps = 100);
58 
59 
60  int width() const;
61  int height() const;
62 
63  void clear(int width, int height);
64  void clear(cv::Size);
65  void clear();
66 
67  void draw(const cv::Mat_<cv::Vec3b>&, real blend = 1.0);
68  void draw(const cv::Mat_<uchar>&, real blend = 1.0);
69 
70  void draw(cv::Rect rect, const cv::Mat_<cv::Vec3b>& img, real blend = 1.0);
71  void draw(cv::Point pt, const cv::Mat_<cv::Vec3b>& img, real blend = 1.0)
72  { draw(cv::Rect(pt, img.size()), img, blend); }
73 
74  void draw(cv::Rect rect, const cv::Mat_<uchar>& img, real blend = 1.0);
75  void draw(cv::Point pt, const cv::Mat_<uchar>& img, real blend = 1.0)
76  { draw(cv::Rect(pt, img.size()), img, blend); }
77 
78  void draw_depth(cv::Rect rect, const cv::Mat_<float>& depth_img, float min_d, float max_d, real blend = 1.0);
79  void draw_depth(cv::Point pt, const cv::Mat_<float>& depth_img, float min_d, float max_d, real blend = 1.0)
80  { draw_depth(cv::Rect(pt, depth_img.size()), depth_img, min_d, max_d, blend); }
81 
82  void draw_text(cv::Rect rect, const std::string& text, text_alignment = left);
83  void draw_text(cv::Rect rect, const std::string& text, text_alignment, cv::Vec3b color);
84  void draw_2d_cross_indicator(cv::Rect rect, real value_x, real value_y, real max_abs_value);
85  void draw_2d_arrow_indicator(cv::Rect rect, real value_x, real value_y, real max_value);
86 
87  bool show(int& keycode);
88  bool show();
89 
90  void show_modal();
91  void update_modal();
92  void close_modal();
93 
94  static cv::Mat_<uchar> visualize_depth(const cv::Mat&, float min_d, float max_d);
95  static cv::Mat_<uchar> visualize_ir(const cv::Mat&, float min_ir, float max_ir);
96 };
97 
98 
100 public:
102 
103 protected:
104  slider_base() = default;
105  slider_base(const slider_base&) = delete;
106  slider_base(slider_base&&) = delete;
107  slider_base& operator=(const slider_base&) = delete;
108  slider_base& operator=(slider_base&&) = delete;
109 };
110 
111 
113 public:
114  const int min;
115  const int max;
116  const int step;
117 
118  int_slider(int value_, int min_, int max_, int step_);
119 
120  int slider_max() const;
121 
122  int value() const;
123  void set_value(int val);
124 
125  operator int () const { return value(); }
126 };
127 
128 
130 public:
131  const real min;
132  const real max;
133  const int steps;
134 
135  real_slider(real value_, real min_, real max_, int steps_);
136 
137  int slider_max() const;
138 
139  real value() const;
140  void set_value(real val);
141 
142  operator real () const { return value(); }
143 };
144 
145 
146 }
147 
148 #endif
real_slider & add_real_slider(const std::string &caption, real default_val, real min_val, real max_val, int steps=100)
Definition: viewer.cc:273
viewer & operator=(const viewer &)=delete
std::function< void(int keycode)> key_callback
Definition: viewer.h:41
viewer(cv::Size sz, bool resizeable=false)
Definition: viewer.h:48
void close_modal()
Definition: viewer.cc:258
cv::Vec3b white
Definition: viewer.h:35
static cv::Mat_< uchar > visualize_depth(const cv::Mat &, float min_d, float max_d)
Definition: viewer.cc:95
void draw_2d_cross_indicator(cv::Rect rect, real value_x, real value_y, real max_abs_value)
Definition: viewer.cc:186
void draw(const cv::Mat_< cv::Vec3b > &, real blend=1.0)
Definition: viewer.cc:119
void show_modal()
Definition: viewer.cc:230
text_alignment
Definition: viewer.h:19
std::function< void(int event, int x, int y)> mouse_callback
Definition: viewer.h:42
cv::Vec3b indicator_color
Definition: viewer.h:36
cv::Vec3b background_color
Definition: viewer.h:37
viewer(const std::string &title, cv::Size sz, bool resizeable=false)
Definition: viewer.h:45
cv::Vec3b black
Definition: viewer.h:34
void draw_depth(cv::Point pt, const cv::Mat_< float > &depth_img, float min_d, float max_d, real blend=1.0)
Definition: viewer.h:79
bool show()
Definition: viewer.cc:224
void draw(cv::Point pt, const cv::Mat_< cv::Vec3b > &img, real blend=1.0)
Definition: viewer.h:71
double real
Definition: common.h:16
void clear()
Definition: viewer.cc:90
void draw_depth(cv::Rect rect, const cv::Mat_< float > &depth_img, float min_d, float max_d, real blend=1.0)
Definition: viewer.cc:161
int height() const
Definition: viewer.cc:71
cv::Vec3b text_color
Definition: viewer.h:38
void draw(cv::Point pt, const cv::Mat_< uchar > &img, real blend=1.0)
Definition: viewer.h:75
void draw_2d_arrow_indicator(cv::Rect rect, real value_x, real value_y, real max_value)
Definition: viewer.cc:206
viewer(const std::string &title, int width, int height, bool resizeable=false)
Definition: viewer.cc:30
void update_modal()
Definition: viewer.cc:251
void draw_text(cv::Rect rect, const std::string &text, text_alignment=left)
Definition: viewer.cc:182
int_slider & add_int_slider(const std::string &caption, int default_val, int min_val, int max_val, int step=1)
Definition: viewer.cc:263
static cv::Mat_< uchar > visualize_ir(const cv::Mat &, float min_ir, float max_ir)
Definition: viewer.cc:107
int width() const
Definition: viewer.cc:66
std::function< void()> update_callback
Definition: viewer.h:40