UFO 1.0.0
An Efficient Probabilistic 3D Mapping Framework That Embraces the Unknown
Loading...
Searching...
No Matches
io.hpp
1
42#ifndef UFO_IO_HPP
43#define UFO_IO_HPP
44
45// UFO
46#include <ufo/cloud/point_cloud.hpp>
47#include <ufo/io/cloud_properties.hpp>
48#include <ufo/io/file_type.hpp>
49#include <ufo/io/image_properties.hpp>
50#include <ufo/io/jpeg.hpp>
51#include <ufo/io/obj.hpp>
52#include <ufo/io/pcd.hpp>
53#include <ufo/io/ply.hpp>
54#include <ufo/io/png.hpp>
55#include <ufo/io/pts.hpp>
56#include <ufo/io/qtp.hpp>
57#include <ufo/io/ufo.hpp>
58#include <ufo/io/xyz.hpp>
59#include <ufo/io/xyzi.hpp>
60#include <ufo/io/xyzn.hpp>
61#include <ufo/io/xyzrgb.hpp>
62#include <ufo/vision/color.hpp>
63#include <ufo/vision/image.hpp>
64
65namespace ufo
66{
67// Cloud
68
69[[nodiscard]] CloudProperties cloudProperties(std::filesystem::path const& file);
70
71template <std::size_t Dim, class T, class... Ts>
72bool read(std::filesystem::path const& file, PointCloud<Dim, T, Ts...>& pc)
73{
74 switch (fileType(file)) {
75 case FileType::OBJ: return readOBJ(file, pc);
76 case FileType::PCD: return readPCD(file, pc);
77 case FileType::PLY: return readPLY(file, pc);
78 case FileType::PTS: return readPTS(file, pc);
79 case FileType::UFO: return readUFO(file, pc);
80 case FileType::XYZ: return readXYZ(file, pc);
81 case FileType::XYZI: return readXYZI(file, pc);
82 case FileType::XYZN: return readXYZN(file, pc);
83 case FileType::XYZRGB: return readXYZRGB(file, pc);
84 case FileType::JPEG: [[fallthrough]];
85 case FileType::PNG: [[fallthrough]];
86 case FileType::QTP: [[fallthrough]];
88 std::println(stderr, "[UFO | Read] Unknown point cloud file type: {}",
89 file.c_str());
90 return false;
91 }
92 return false;
93}
94
95template <std::size_t Dim, class T, class... Ts>
96bool write(std::filesystem::path const& file, PointCloud<Dim, T, Ts...> const& pc)
97{
98 switch (fileType(file)) {
99 case FileType::OBJ: return writeOBJ(file, pc);
100 case FileType::PCD: return writePCD(file, pc);
101 case FileType::PLY: return writePLY(file, pc);
102 case FileType::PTS: return writePTS(file, pc);
103 case FileType::UFO: return writeUFO(file, pc);
104 case FileType::XYZ: return writeXYZ(file, pc);
105 case FileType::XYZI: return writeXYZI(file, pc);
106 case FileType::XYZN: return writeXYZN(file, pc);
107 case FileType::XYZRGB: return writeXYZRGB(file, pc);
108 case FileType::JPEG: [[fallthrough]];
109 case FileType::PNG: [[fallthrough]];
110 case FileType::QTP: [[fallthrough]];
112 std::println(stderr, "[UFO | Write] Unknown point cloud file type: {}",
113 file.c_str());
114 return false;
115 }
116 return false;
117}
118
119// Image
120
121[[nodiscard]] ImageProperties imageProperties(std::filesystem::path const& file);
122
123template <class T>
124bool read(std::filesystem::path const& file, Image<T>& image)
125{
126 switch (fileType(file)) {
127 case FileType::JPEG: return readJPEG(file, image);
128 case FileType::PNG: return readPNG(file, image);
129 case FileType::QTP: return readQTP(file, image);
130 case FileType::OBJ: [[fallthrough]];
131 case FileType::PCD: [[fallthrough]];
132 case FileType::PLY: [[fallthrough]];
133 case FileType::PTS: [[fallthrough]];
134 case FileType::UFO: [[fallthrough]];
135 case FileType::XYZ: [[fallthrough]];
136 case FileType::XYZI: [[fallthrough]];
137 case FileType::XYZN: [[fallthrough]];
138 case FileType::XYZRGB: [[fallthrough]];
140 std::println(stderr, "[UFO | Read] Unknown image file type: {}", file.c_str());
141 return false;
142 }
143 return false;
144}
145
146template <class T>
147bool write(std::filesystem::path const& file, Image<T> const& image)
148{
149 switch (fileType(file)) {
150 case FileType::JPEG: return writeJPEG(file, image);
151 case FileType::PNG: return writePNG(file, image);
152 case FileType::QTP: return writeQTP(file, image);
153 case FileType::OBJ: [[fallthrough]];
154 case FileType::PCD: [[fallthrough]];
155 case FileType::PLY: [[fallthrough]];
156 case FileType::PTS: [[fallthrough]];
157 case FileType::UFO: [[fallthrough]];
158 case FileType::XYZ: [[fallthrough]];
159 case FileType::XYZI: [[fallthrough]];
160 case FileType::XYZN: [[fallthrough]];
161 case FileType::XYZRGB: [[fallthrough]];
163 std::println(stderr, "[UFO | Write] Unknown image file type: {}", file.c_str());
164 return false;
165 }
166 return false;
167}
168} // namespace ufo
169
170#endif // UFO_IO_HPP
All vision-related classes and functions.
Definition cloud.hpp:49
bool readPNG(std::filesystem::path const &file, Image< Color< CT, T, Alpha, Weight > > &image)
Reads a PNG file into an Image of the specified colour type.
Definition png.hpp:138
bool writePNG(std::filesystem::path const &file, Image< Color< CT, T, Alpha, Weight > > const &image)
Writes an Image to a PNG file.
Definition png.hpp:221
@ XYZRGB
ASCII XYZ + RGB colour (.xyzrgb).
@ XYZN
ASCII XYZ + surface normal (.xyzn).
@ XYZI
ASCII XYZ + intensity (.xyzi).
@ PLY
Stanford PLY mesh / point cloud (.ply).
@ PNG
PNG lossless image (.png).
@ PCD
PCL Point Cloud Data (.pcd).
@ UNKNOWN
Unrecognised or missing file extension.
@ PTS
Leica PTS point cloud (.pts).
@ QTP
UFO quantised-tree point-cloud format (.qtp).
@ JPEG
JPEG compressed image (.jpeg, .jpg).
@ UFO
Native UFOMap binary format (.ufo).
@ XYZ
ASCII XYZ point cloud (.xyz).
@ OBJ
Wavefront OBJ (.obj).
FileType fileType(std::filesystem::path const &file)
Infers the FileType from the extension of file (case-insensitive).
Definition file_type.cpp:31