vpgl_io_camera.hxx
Go to the documentation of this file.
1 #ifndef vpgl_io_camera_hxx_
2 #define vpgl_io_camera_hxx_
3 
4 #include <string>
5 #include <iostream>
6 #include "vpgl_io_camera.h"
7 //:
8 // \file
19 
20 #include <vsl/vsl_binary_io.h>
21 #ifdef _MSC_VER
22 # include <vcl_msvc_warnings.h>
23 #endif
24 
25 
26 //: Binary save camera to stream
27 template <class T>
28 void vsl_b_write(vsl_b_ostream & os, vpgl_camera<T>* const& camera)
29 {
30  if ( camera->type_name() == "vpgl_proj_camera" ){
31  // projective camera
32  vpgl_proj_camera<T>* procam = static_cast<vpgl_proj_camera<T>*>(camera);
33  vsl_b_write(os,procam->type_name());
34  vsl_b_write(os,*procam);
35  }
36  else if ( camera->type_name() == "vpgl_perspective_camera" ) {
37  // perspective camera
39  static_cast<vpgl_perspective_camera<T>*>(camera);
40  vsl_b_write(os,percam->type_name());
41  vsl_b_write(os,*percam);
42  }
43  else if ( camera->type_name() == "vpgl_affine_camera" ) {
44  // affine camera
45  vpgl_affine_camera<T>* affcam =
46  static_cast<vpgl_affine_camera<T>*>(camera);
47  vsl_b_write(os,affcam->type_name());
48  vsl_b_write(os,*affcam);
49  }
50  else if ( camera->type_name() == "vpgl_rational_camera" ) {
51  // rational camera
52  vpgl_rational_camera<T>* ratcam =
53  static_cast<vpgl_rational_camera<T>*>(camera);
54  vsl_b_write(os,ratcam->type_name());
55  vsl_b_write(os,*ratcam);
56  }
57  else if ( camera->type_name() == "vpgl_local_rational_camera" ) {
58  // local rational camera
60  static_cast<vpgl_local_rational_camera<T>*>(camera);
61  vsl_b_write(os,lratcam->type_name());
62  vsl_b_write(os,*lratcam);
63  }
64  else {
65  std::cerr << "tried to write unknown camera type!\n";
66  std::string cam_type("unknown");
67  vsl_b_write(os,cam_type);
68  }
69  return;
70 }
71 
72 
73 //: Binary load camera from stream.
74 template <class T>
76 {
77  std::string cam_type;
78  vsl_b_read(is,cam_type);
79 
80  if (cam_type == "vpgl_proj_camera") {
81  // projective camera
83  vsl_b_read(is,*procam);
84  camera = procam;
85  }
86  else if (cam_type == "vpgl_perspective_camera") {
87  // perspective camera
89  vsl_b_read(is,*percam);
90  camera = percam;
91  }
92  else if (cam_type == "vpgl_affine_camera") {
93  // rational camera
95  vsl_b_read(is,*affcam);
96  camera = affcam;
97  }
98  else if (cam_type == "vpgl_rational_camera") {
99  // rational camera
101  vsl_b_read(is,*ratcam);
102  camera = ratcam;
103  }
104  else if (cam_type == "vpgl_local_rational_camera") {
105  // rational camera
107  vsl_b_read(is,*lratcam);
108  camera = lratcam;
109  }
110  else if (cam_type == "unknown") {
111  std::cerr << "cannot read camera of unknown type!\n";
112  }
113  else {
114  std::cerr << "error reading vpgl_camera!\n";
115  }
116  return;
117 }
118 
119 #define VPGL_IO_CAMERA_INSTANTIATE(T) \
120 template void vsl_b_read(vsl_b_istream &, vpgl_camera<T >* &); \
121 template void vsl_b_write(vsl_b_ostream &, vpgl_camera<T >* const&)
122 
123 #endif // vpgl_io_camera_hxx_
A class for the perspective camera model.
A class for the affine camera model.
std::string type_name() const override
class identity functions for casting.
void vsl_b_write(vsl_b_ostream &os, vpgl_camera< T > *const &camera)
Binary save camera to stream.
std::string type_name() const override
class identity functions for casting.
A camera model based on ratios of cubic polynomials.
std::string type_name() const override
class identity functions for casting.
std::string type_name() const override
class identity functions for casting.
virtual std::string type_name() const
class identity functions for casting.
Definition: vpgl_camera.h:39
This class implements the perspective camera class as described in Hartley & Zisserman as a finite ca...
A local rational camera model.
A camera model using the standard 3x4 matrix representation.
std::string type_name() const override
class identity functions for casting.
void vsl_b_read(vsl_b_istream &is, vpgl_camera< T > *&camera)
Binary load camera from stream.