Go to the documentation of this file. 1 #ifndef GEOLIB_DEPTHCAMERA_H_
2 #define GEOLIB_DEPTHCAMERA_H_
4 #include <opencv2/core/core.hpp>
9 #include <image_geometry/pinhole_camera_model.h>
10 #include <sensor_msgs/CameraInfo.h>
92 virtual void renderPixel(
int x,
int y,
float depth,
int i_triangle) = 0;
138 virtual void renderPixel(
int x,
int y,
float depth,
int i_triangle);
167 DepthCamera(
const image_geometry::PinholeCameraModel& cam_model);
169 DepthCamera(
const sensor_msgs::CameraInfo& cam_info);
199 template<
typename Tin=
double,
typename Tout=
double>
201 return cv::Point_<Tout>((
fx() * p.
x +
Tx()) / -p.
z +
cx(), (
fy() * -p.
y +
Ty()) / -p.
z +
cy());
214 template<
typename T=
double>
253 template<
typename Tin=
double,
typename Tout=
double>
257 template<
typename T=
double>
262 float x_start,
float x_start_delta,
float x_end,
float x_end_delta,
263 float d_start,
float d_start_delta,
float d_end,
float d_end_delta,
266 template<
typename T=
double>
static constexpr const double near_clip_z_
static PointerMap EMPTY_POINTER_MAP
double getOpticalCenterY() const
void setMesh(const geo::Mesh &mesh, const geo::Pose3D &pose=geo::Pose3D::identity())
setMesh: set mesh to be rendered
virtual void renderPixel(int x, int y, float depth, int i_triangle)
void drawTriangle(const geo::Vec3T< Tin > &p1, const geo::Vec3T< Tin > &p2, const geo::Vec3T< Tin > &p3, const RenderOptions &opt, RenderResult &res, uint i_triangle) const
Pose3D pose_
pose_ pose of the mesh with respect to the virtual camera
void setBackFaceCulling(bool b)
double getOpticalTranslationX() const
RasterizeResult rasterize(const Shape &shape, const Pose3D &pose, cv::Mat &image, PointerMap &pointer_map=EMPTY_POINTER_MAP, void *pointer=0, TriangleMap &triangle_map=EMPTY_TRIANGLE_MAP) const
rasterize: render a 3D shape onto a 2D image
void render(const RenderOptions &opt, RenderResult &res) const
void initFromCamModel(const image_geometry::PinholeCameraModel &cam_model)
Set camera parameters from pinhole camera model.
bool back_face_culling_
back_face_culling_ flag to optimise rendering mesh triangles facing away from the camera.
double project2Dto3DY(int y) const
static TriangleMap EMPTY_TRIANGLE_MAP
void drawTriangle2D(const geo::Vec3T< T > &p1, const geo::Vec3T< T > &p2, const geo::Vec3T< T > &p3, const RenderOptions &opt, RenderResult &res, uint i_triangle) const
std::vector< std::vector< int > > TriangleMap
TriangleMap maps pixels in a depth image to an index in the list of triangles in the mesh....
const geo::Mesh * mesh_
mesh_ mesh to be rendered
DefaultRenderResult(cv::Mat &image, void *pointer, PointerMap &pointer_map, TriangleMap &triangle_map)
PointerMap & pointer_map_
const TriangleMap & getTriangleMap() const
void sort(const geo::Vec3T< T > *&p_min, const geo::Vec3T< T > *&p_mid, const geo::Vec3T< T > *&p_max, uchar dim) const
virtual ~DefaultRenderResult()
image_geometry::PinholeCameraModel cam_model_
double getFocalLengthX() const
geo::Vec3T< T > project2Dto3D(int x, int y) const
TriangleMap & triangle_map_
double getOpticalTranslationY() const
void drawTrianglePart(int y_start, int y_end, float x_start, float x_start_delta, float x_end, float x_end_delta, float d_start, float d_start_delta, float d_end, float d_end_delta, const RenderOptions &opt, RenderResult &res, uint i_triangle) const
bool initialized() const
Indicates whether the camera parameters are set. Using the camera when not initialized is useless.
double getFocalLengthY() const
cv::Point_< Tout > project3Dto2D(const geo::Vec3T< Tin > &p) const
const PointerMap & getPointerMap() const
std::vector< std::vector< void * > > PointerMap
PointerMap maps pixels in a depth image to an identifier.
double project2Dto3DX(int x) const
RenderResult(int width, int height)
const cv::Mat & getDepthImage() const
double getOpticalCenterX() const
A geometric description of a shape.
virtual void renderPixel(int x, int y, float depth, int i_triangle)=0