licornea_tools
camera_mpeg.cc
Go to the documentation of this file.
1 #include "camera_mpeg.h"
2 #include "../../lib/camera.h"
3 #include <iomanip>
4 #include <istream>
5 #include <ostream>
6 
7 namespace tlz {
8 
9 bool read_camera_mpeg(std::istream& input, camera& cam, bool convert) {
10  input >> cam.name;
11  if(input.eof() || input.fail()) return false;
12 
13  if(cam.name == "0") { // extra last row (0 0 0 1) of previous extrinsic
14  int unused;
15  input >> unused >> unused >> unused;
16  return read_camera_mpeg(input, cam, convert);
17  }
18 
19  input >> cam.intrinsic(0, 0) >> cam.intrinsic(0, 1) >> cam.intrinsic(0, 2);
20  input >> cam.intrinsic(1, 0) >> cam.intrinsic(1, 1) >> cam.intrinsic(1, 2);
21  input >> cam.intrinsic(2, 0) >> cam.intrinsic(2, 1) >> cam.intrinsic(2, 2);
22 
23  real unused[2]; // unused, always 0
24  input >> unused[0] >> unused[1];
25 
26  input >> cam.rotation(0, 0) >> cam.rotation(0, 1) >> cam.rotation(0, 2) >> cam.translation[0];
27  input >> cam.rotation(1, 0) >> cam.rotation(1, 1) >> cam.rotation(1, 2) >> cam.translation[1];
28  input >> cam.rotation(2, 0) >> cam.rotation(2, 1) >> cam.rotation(2, 2) >> cam.translation[2];
29 
30  if(convert) cam.translation = -(cam.rotation * cam.translation);
31 
32  return true;
33 }
34 
35 void write_camera_mpeg(std::ostream& output, const camera& orig_cam, bool convert) {
36  camera cam = orig_cam;
37  if(convert) cam.translation = -(cam.rotation.t() * cam.translation);
38 
39  output << std::setprecision(20);
40  output << cam.name << "\n";
41  output << cam.intrinsic(0, 0) << ' ' << cam.intrinsic(0, 1) << ' ' << cam.intrinsic(0, 2) << '\n';
42  output << cam.intrinsic(1, 0) << ' ' << cam.intrinsic(1, 1) << ' ' << cam.intrinsic(1, 2) << '\n';
43  output << cam.intrinsic(2, 0) << ' ' << cam.intrinsic(2, 1) << ' ' << cam.intrinsic(2, 2) << '\n';
44  output << "0\n0\n";
45  output << cam.rotation(0, 0) << ' ' << cam.rotation(0, 1) << ' ' << cam.rotation(0, 2) << ' ' << cam.translation[0] << '\n';
46  output << cam.rotation(1, 0) << ' ' << cam.rotation(1, 1) << ' ' << cam.rotation(1, 2) << ' ' << cam.translation[1] << '\n';
47  output << cam.rotation(2, 0) << ' ' << cam.rotation(2, 1) << ' ' << cam.rotation(2, 2) << ' ' << cam.translation[2] << '\n';
48  output << '\n';
49 }
50 
51 }
mat33 intrinsic
Definition: camera.h:15
bool read_camera_mpeg(std::istream &input, camera &cam, bool convert)
Definition: camera_mpeg.cc:9
std::string name
Definition: camera.h:14
mat33 rotation
Definition: camera.h:16
double real
Definition: common.h:16
void write_camera_mpeg(std::ostream &output, const camera &orig_cam, bool convert)
Definition: camera_mpeg.cc:35
vec3 translation
Definition: camera.h:17