licornea_tools
view_dataset.cc
Go to the documentation of this file.
1 #include "../lib/args.h"
2 #include "../lib/opencv.h"
3 #include "../lib/dataset.h"
4 #include "../lib/image_io.h"
5 #include "../lib/viewer.h"
6 #include "../lib/filesystem.h"
7 #include <string>
8 
9 using namespace tlz;
10 
11 const real max_viz_depth = 6000;
12 
13 int main(int argc, const char* argv[]) {
14  get_args(argc, argv, "dataset_parameters.json [dataset_group]");
15  dataset datas = dataset_arg();
16  std::string dataset_group_name = string_opt_arg("");
17  dataset_group datag = datas.group(dataset_group_name);
18 
19  cv::Size sz = datag.image_size_with_border();
20  sz.height += 20;
21 
22  viewer view("Dataset Viewer", sz, true);
23  auto& slider_x = view.add_int_slider("X", datas.x_mid(), datas.x_min(), datas.x_max(), datas.x_step());
24  auto& slider_y = view.add_int_slider("Y", datas.y_mid(), datas.y_min(), datas.y_max(), datas.y_step());
25  auto& depth_opacity_slider = view.add_real_slider("depth op", 0.0, 0.0, 1.0);
26  auto& d_min_slider = view.add_real_slider("d min", 0, 0, max_viz_depth);
27  auto& d_max_slider = view.add_real_slider("d max", max_viz_depth, 0, max_viz_depth);
28 
29  view.update_callback = [&]() {
30  view_index idx(slider_x.value(), slider_y.value());
31  if(! datas.valid(idx)) return;
32 
33  std::string image_filename = datag.view(idx).image_filename();
34  std::string depth_filename = datag.view(idx).depth_filename();
35 
36  view.clear();
37  view.draw_text(cv::Rect(10, 0, sz.width-20, 20), "index: " + encode_view_index(idx));
38  try {
39  if(depth_opacity_slider == 1.0) {
40  cv::Mat_<ushort> depth_img = load_depth(depth_filename);
41  cv::Mat_<uchar> viz_depth_img = viewer::visualize_depth(depth_img, d_min_slider, d_max_slider);
42  view.draw(cv::Point(0, 20), viz_depth_img);
43  } else if(depth_opacity_slider == 0.0) {
44  cv::Mat_<cv::Vec3b> img = load_texture(image_filename);
45  view.draw(cv::Point(0, 20), img);
46  } else {
47  cv::Mat_<cv::Vec3b> img = load_texture(image_filename);
48  cv::Mat_<ushort> depth_img = load_depth(depth_filename);
49  cv::Mat_<uchar> viz_depth_img = viewer::visualize_depth(depth_img, d_min_slider, d_max_slider);
50  cv::Mat_<cv::Vec3b> viz_depth_img_col;
51  cv::cvtColor(viz_depth_img, viz_depth_img_col, CV_GRAY2BGR);
52  cv::addWeighted(img, 1.0-depth_opacity_slider, viz_depth_img_col, depth_opacity_slider, 0.0, img);
53  view.draw(cv::Point(0, 20), img);
54  }
55  } catch(const std::runtime_error&) {
56  std::cout << "could not load " << image_filename << std::endl;
57  }
58  };
59 
60  view.show_modal();
61 }
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
cv::Size image_size_with_border() const
Definition: dataset.cc:101
int x_step() const
Definition: dataset.cc:173
static cv::Mat_< uchar > visualize_depth(const cv::Mat &, float min_d, float max_d)
Definition: viewer.cc:95
std::string image_filename() const
Definition: dataset.cc:64
std::string encode_view_index(view_index idx)
Definition: dataset.cc:275
int main(int argc, const char *argv[])
Definition: view_dataset.cc:13
void draw(const cv::Mat_< cv::Vec3b > &, real blend=1.0)
Definition: viewer.cc:119
int x_max() const
Definition: dataset.cc:169
int x_min() const
Definition: dataset.cc:165
void show_modal()
Definition: viewer.cc:230
cv::Mat_< ushort > load_depth(const std::string &filename)
Definition: image_io.cc:35
dataset_view view(int x) const
Definition: dataset.cc:105
int x_mid() const
Definition: dataset.cc:186
cv::Mat_< cv::Vec3b > load_texture(const std::string &filename)
Definition: image_io.cc:6
bool valid(view_index) const
Definition: dataset.cc:231
std::string depth_filename() const
Definition: dataset.cc:68
dataset dataset_arg()
Definition: dataset.cc:297
double real
Definition: common.h:16
int y_step() const
Definition: dataset.cc:206
int y_max() const
Definition: dataset.cc:201
const real max_viz_depth
Definition: view_dataset.cc:11
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
void clear(int width, int height)
Definition: viewer.cc:76
int y_min() const
Definition: dataset.cc:196
dataset_group group(const std::string &grp) const
Definition: dataset.cc:265
std::function< void()> update_callback
Definition: viewer.h:40
int y_mid() const
Definition: dataset.cc:226
std::string string_opt_arg(const std::string &def="")
Definition: args.h:36
void get_args(int argc, const char *argv[], const std::string &usage)
Definition: args.cc:49