ACloudViewer  3.9.4
A Modern Library for 3D Data Processing
camera.cpp
Go to the documentation of this file.
1 // ----------------------------------------------------------------------------
2 // - CloudViewer: www.cloudViewer.org -
3 // ----------------------------------------------------------------------------
4 // Copyright (c) 2018-2024 www.cloudViewer.org
5 // SPDX-License-Identifier: MIT
6 // ----------------------------------------------------------------------------
7 
8 #include "pybind/camera/camera.h"
9 
12 #include "pybind/docstring.h"
13 
14 namespace cloudViewer {
15 namespace camera {
16 
17 void pybind_camera_classes(py::module &m) {
18  // cloudViewer.camera.PinholeCameraIntrinsic
19  py::class_<camera::PinholeCameraIntrinsic> pinhole_intr(
20  m, "PinholeCameraIntrinsic",
21  "PinholeCameraIntrinsic class stores intrinsic camera matrix, and "
22  "image height and width.");
23  py::detail::bind_default_constructor<camera::PinholeCameraIntrinsic>(
24  pinhole_intr);
25  py::detail::bind_copy_functions<camera::PinholeCameraIntrinsic>(
26  pinhole_intr);
27  pinhole_intr
28  .def(py::init([](int w, int h, double fx, double fy, double cx,
29  double cy) {
30  return new camera::PinholeCameraIntrinsic(w, h, fx, fy, cx,
31  cy);
32  }),
33  "width"_a, "height"_a, "fx"_a, "fy"_a, "cx"_a, "cy"_a)
34  .def(py::init([](camera::PinholeCameraIntrinsicParameters param) {
35  return new camera::PinholeCameraIntrinsic(param);
36  }),
37  "param"_a);
38  pinhole_intr
39  .def("set_intrinsics",
41  "height"_a, "fx"_a, "fy"_a, "cx"_a, "cy"_a,
42  "Set camera intrinsic parameters.")
43  .def("get_focal_length",
45  "Returns the focal length in a tuple of X-axis and Y-axis"
46  "focal lengths.")
47  .def("get_principal_point",
49  "Returns the principal point in a tuple of X-axis and "
50  "Y-axis principal points.")
52  "Returns the skew.")
54  "Returns True iff both the width and height are greater than "
55  "0.")
56  .def_readwrite("width", &camera::PinholeCameraIntrinsic::width_,
57  "int: Width of the image.")
58  .def_readwrite("height", &camera::PinholeCameraIntrinsic::height_,
59  "int: Height of the image.")
60  .def_readwrite("intrinsic_matrix",
62  "3x3 numpy array: Intrinsic camera matrix ``[[fx, "
63  "0, cx], [0, fy, "
64  "cy], [0, 0, 1]]``")
65  .def("__repr__", [](const camera::PinholeCameraIntrinsic &c) {
66  return std::string(
67  "camera::PinholeCameraIntrinsic with width = ") +
69  std::string(" and height = ") +
71  std::string(
72  ".\nAccess intrinsics with intrinsic_matrix.");
73  });
74  docstring::ClassMethodDocInject(m, "PinholeCameraIntrinsic", "__init__");
75  docstring::ClassMethodDocInject(m, "PinholeCameraIntrinsic",
76  "set_intrinsics",
77  {{"width", "Width of the image."},
78  {"height", "Height of the image."},
79  {"fx", "X-axis focal length"},
80  {"fy", "Y-axis focal length."},
81  {"cx", "X-axis principle point."},
82  {"cy", "Y-axis principle point."}});
83  docstring::ClassMethodDocInject(m, "PinholeCameraIntrinsic",
84  "get_focal_length");
85  docstring::ClassMethodDocInject(m, "PinholeCameraIntrinsic",
86  "get_principal_point");
87  docstring::ClassMethodDocInject(m, "PinholeCameraIntrinsic", "get_skew");
88  docstring::ClassMethodDocInject(m, "PinholeCameraIntrinsic", "is_valid");
89 
90  // cloudViewer.camera.PinholeCameraIntrinsicParameters
91  py::native_enum<PinholeCameraIntrinsicParameters> pinhole_intr_params(
92  m, "PinholeCameraIntrinsicParameters", "enum.Enum",
93  "Enum class that contains default camera intrinsic parameters for "
94  "different sensors.");
95  pinhole_intr_params
96  .value("PrimeSenseDefault",
98  "Default camera intrinsic parameter for PrimeSense.")
99  .value("Kinect2DepthCameraDefault",
101  "Default camera intrinsic parameter for Kinect2 depth "
102  "camera.")
103  .value("Kinect2ColorCameraDefault",
105  "Default camera intrinsic parameter for Kinect2 color "
106  "camera.")
107  .export_values()
108  .finalize();
109 
110  // cloudViewer.camera.PinholeCameraParameters
111  py::class_<camera::PinholeCameraParameters> pinhole_param(
112  m, "PinholeCameraParameters",
113  "Contains both intrinsic and extrinsic pinhole camera parameters.");
114  py::detail::bind_default_constructor<camera::PinholeCameraParameters>(
115  pinhole_param);
116  py::detail::bind_copy_functions<camera::PinholeCameraParameters>(
117  pinhole_param);
118  pinhole_param
119  .def_readwrite("intrinsic",
121  "``cloudViewer.camera.PinholeCameraIntrinsic``: "
122  "PinholeCameraIntrinsic "
123  "object.")
124  .def_readwrite("extrinsic",
126  "4x4 numpy array: Camera extrinsic parameters.")
127  .def("__repr__", [](const camera::PinholeCameraParameters &c) {
128  return std::string("camera::PinholeCameraParameters class.\n") +
129  std::string(
130  "Access its data via intrinsic and extrinsic.");
131  });
132 
133  // cloudViewer.camera.PinholeCameraTrajectory
134  py::class_<camera::PinholeCameraTrajectory> pinhole_traj(
135  m, "PinholeCameraTrajectory",
136  "Contains a list of ``PinholeCameraParameters``, useful to storing "
137  "trajectories.");
138  py::detail::bind_default_constructor<camera::PinholeCameraTrajectory>(
139  pinhole_traj);
140  py::detail::bind_copy_functions<camera::PinholeCameraTrajectory>(
141  pinhole_traj);
142  pinhole_traj
143  .def_readwrite(
145  "``List(cloudViewer.camera.PinholeCameraParameters)``: "
146  "List of PinholeCameraParameters objects.")
147  .def("__repr__", [](const camera::PinholeCameraTrajectory &c) {
148  return std::string("camera::PinholeCameraTrajectory class.\n") +
149  std::string("Access its data via camera_parameters.");
150  });
151 }
152 
153 void pybind_camera(py::module &m) {
154  py::module m_submodule = m.def_submodule("camera");
155  pybind_camera_classes(m_submodule);
156 }
157 
158 } // namespace camera
159 } // namespace cloudViewer
Contains the pinhole camera intrinsic parameters.
bool IsValid() const
Returns true iff both the width and height are greater than 0.
std::pair< double, double > GetFocalLength() const
Returns the focal length in a tuple of X-axis and Y-axis focal lengths.
void SetIntrinsics(int width, int height, double fx, double fy, double cx, double cy)
Set camera intrinsic parameters.
std::pair< double, double > GetPrincipalPoint() const
Contains both intrinsic and extrinsic pinhole camera parameters.
PinholeCameraIntrinsic intrinsic_
PinholeCameraIntrinsic object.
Eigen::Matrix4d_u extrinsic_
Camera extrinsic parameters.
std::vector< PinholeCameraParameters > parameters_
List of PinholeCameraParameters objects.
PinholeCameraIntrinsicParameters
Sets default camera intrinsic parameters for sensors.
@ PrimeSenseDefault
Default settings for PrimeSense camera sensor.
@ Kinect2DepthCameraDefault
Default settings for Kinect2 depth camera.
@ Kinect2ColorCameraDefault
Default settings for Kinect2 color camera.
void pybind_camera_classes(py::module &m)
Definition: camera.cpp:17
void pybind_camera(py::module &m)
void ClassMethodDocInject(py::module &pybind_module, const std::string &class_name, const std::string &function_name, const std::unordered_map< std::string, std::string > &map_parameter_body_docs)
Definition: docstring.cpp:27
Generic file read and write utility for python interface.
std::string to_string(const T &n)
Definition: Common.h:20