licornea_tools
cat_obj_img_cors.cc
Go to the documentation of this file.
1 #include "../lib/common.h"
2 #include "../lib/obj_img_correspondence.h"
3 #include "../lib/json.h"
4 #include "../lib/args.h"
5 #include <string>
6 
7 using namespace tlz;
8 
9 int main(int argc, const char* argv[]) {
10  get_args(argc, argv, "in1.json in2.json out.json [1/2]");
11  std::string cors1_filename = in_filename_arg();
12  std::string cors2_filename = in_filename_arg();
13  std::string out_cors_filename = out_filename_arg();
14  int which = int_opt_arg(1) - 1;
15 
16  json cors1 = import_json_file(cors1_filename);
17  json cors2 = import_json_file(cors2_filename);
18 
21 
22  if(dim1.obj_count != 1 || dim2.obj_count != 1) throw std::runtime_error("unsupported dims (obj_count != 1)");
23 
24  if(dim1.img_count == 1 && dim2.img_count == 1) {
25  obj_img_correspondences_set<1, 1> set1 = decode_obj_img_correspondences_set<1, 1>(cors1);
26  obj_img_correspondences_set<1, 1> set2 = decode_obj_img_correspondences_set<1, 1>(cors2);
27  obj_img_correspondences_set<1, 1> out_set = set1;
28  out_set.insert(out_set.end(), set2.cbegin(), set2.cend());
29  export_json_file(encode_obj_img_correspondences_set(out_set), out_cors_filename);
30  } else if(dim1.img_count == 2 && dim2.img_count == 2) {
31  obj_img_correspondences_set<1, 2> set1 = decode_obj_img_correspondences_set<1, 2>(cors1);
32  obj_img_correspondences_set<1, 2> set2 = decode_obj_img_correspondences_set<1, 2>(cors2);
33  obj_img_correspondences_set<1, 2> out_set = set1;
34  out_set.insert(out_set.end(), set2.cbegin(), set2.cend());
35  export_json_file(encode_obj_img_correspondences_set(out_set), out_cors_filename);
36  } else if(dim1.img_count + dim2.img_count == 3) {
38 
39  auto insert_from_double = [&out_set](const obj_img_correspondences_set<1, 2>& set, int which) {
40  for(const auto& cors : set) {
41  out_set.emplace_back();
42  auto& out_cors = out_set.back();
43  for(const auto& cor : cors) {
44  out_cors.emplace_back();
45  auto& out_cor = out_cors.back();
46  out_cor.object_coordinates[0] = cor.object_coordinates[0];
47  out_cor.image_coordinates[0] = cor.image_coordinates[which];
48  }
49  }
50  };
51 
52  if(dim1.img_count == 2) {
53  obj_img_correspondences_set<1, 2> set1 = decode_obj_img_correspondences_set<1, 2>(cors1);
54  obj_img_correspondences_set<1, 1> set2 = decode_obj_img_correspondences_set<1, 1>(cors2);
55 
56  insert_from_double(set1, which);
57  out_set.insert(out_set.end(), set2.cbegin(), set2.cend());
58 
59  } else if(dim2.img_count == 2) {
60  obj_img_correspondences_set<1, 1> set1 = decode_obj_img_correspondences_set<1, 1>(cors1);
61  obj_img_correspondences_set<1, 2> set2 = decode_obj_img_correspondences_set<1, 2>(cors2);
62 
63  out_set.insert(out_set.end(), set1.cbegin(), set1.cend());
64  insert_from_double(set2, which);
65  } else {
66  throw std::runtime_error("unsupported dims");
67  }
68 
69  export_json_file(encode_obj_img_correspondences_set(out_set), out_cors_filename);
70  } else {
71  throw std::runtime_error("unsupported dims");
72  }
73 }
long int_opt_arg(long def)
Definition: args.h:50
std::string in_filename_arg()
Definition: args.cc:98
int main(int argc, const char *argv[])
void export_json_file(const json &j, const std::string &filename, bool compact)
Definition: json.cc:9
obj_img_correspondences_set_dim decode_obj_img_correspondences_set_dim(const json &j_set)
std::string out_filename_arg()
Definition: args.cc:104
json encode_obj_img_correspondences_set(const obj_img_correspondences_set< Obj_count, Img_count > &)
nlohmann::json json
Definition: json.h:11
json import_json_file(const std::string &filename)
Definition: json.cc:24
std::vector< obj_img_correspondences< Obj_count, Img_count >> obj_img_correspondences_set
void get_args(int argc, const char *argv[], const std::string &usage)
Definition: args.cc:49