licornea_tools
merge_cameras.cc
Go to the documentation of this file.
1 #include <iostream>
2 #include <fstream>
3 #include <string>
4 #include <cstdlib>
5 #include "../lib/args.h"
6 #include "../lib/assert.h"
7 #include "../lib/camera.h"
8 
9 using namespace tlz;
10 
11 int main(int argc, const char* argv[]) {
12  get_args(argc, argv, "in_cameras1.json in_cameras2.json out_cameras.json [common_camera]");
13  camera_array cameras1 = cameras_arg();
14  camera_array cameras2 = cameras_arg();
15  std::string out_cameras_filename = out_filename_arg();
16  std::string common_camera_name = string_opt_arg();
17 
18  auto cameras1_map = cameras_map(cameras1);
19  auto cameras2_map = cameras_map(cameras2);
20 
21  camera_array out_cameras = cameras1;
22 
23  if(common_camera_name.empty()) {
24  for(const camera& cam : cameras2) {
25  const std::string& name = cam.name;
26  if(cameras1_map.find(name) != cameras1_map.end()) continue;
27  out_cameras.push_back(cam);
28  }
29 
30  } else {
31  if(cameras1_map.find(common_camera_name) == cameras1_map.end())
32  throw std::runtime_error("common_camera not in in_cameras1.json");
33  if(cameras2_map.find(common_camera_name) == cameras2_map.end())
34  throw std::runtime_error("common_camera not in in_cameras2.json");
35 
36  const camera& cam1 = cameras1_map.at(common_camera_name);
37  const camera& cam2 = cameras2_map.at(common_camera_name);
38  mat44 transformation = cam1.extrinsic() * cam2.extrinsic_inv();
39 
40  for(const camera& cam : cameras2) {
41  const std::string& name = cam.name;
42  if(cameras1_map.find(name) != cameras1_map.end()) continue;
43  camera transformed_cam = cam;
44  mat44 ex = transformed_cam.extrinsic();
45  transformed_cam.set_extrinsic(transformation * ex);
46  out_cameras.push_back(transformed_cam);
47  }
48 
49  }
50 
51  export_cameras_file(out_cameras, out_cameras_filename);
52 }
53 
54 
void export_cameras_file(const camera_array &cameras, const std::string &filename)
Definition: camera.cc:79
std::map< std::string, camera > cameras_map(const camera_array &arr)
Definition: camera.cc:112
int main(int argc, const char *argv[])
mat44 extrinsic_inv() const
Definition: camera.cc:34
camera_array cameras_arg()
Definition: camera.cc:107
mat44 extrinsic() const
Definition: camera.cc:24
void set_extrinsic(const mat44 &)
Definition: camera.cc:46
std::string out_filename_arg()
Definition: args.cc:104
std::vector< camera > camera_array
Definition: camera.h:26
cv::Matx< real, 4, 4 > mat44
Definition: common.h:27
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