diff --git a/CHANGELOG.md b/CHANGELOG.md index 98836909e7a..829d890ef53 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -42,6 +42,7 @@ - Add O3DVisualizer API to enable collapse control of verts in the side panel (PR #6865) - Split pybind declarations/definitions to avoid C++ types in Python docs (PR #6869) - Fix minimal oriented bounding box of MeshBase derived classes and add new unit tests (PR #6898) +- Fix projection of point cloud to Depth/RGBD image if no position attribute is provided (PR #6880) ## 0.13 diff --git a/cpp/open3d/t/geometry/PointCloud.cpp b/cpp/open3d/t/geometry/PointCloud.cpp index f4c5b47f068..b345e0ea985 100644 --- a/cpp/open3d/t/geometry/PointCloud.cpp +++ b/cpp/open3d/t/geometry/PointCloud.cpp @@ -983,6 +983,12 @@ geometry::Image PointCloud::ProjectToDepthImage(int width, const core::Tensor &extrinsics, float depth_scale, float depth_max) { + if (!HasPointPositions()) { + utility::LogWarning( + "Called ProjectToDepthImage on a point cloud with no Positions " + "attribute. Returning empty image."); + return geometry::Image(); + } core::AssertTensorShape(intrinsics, {3, 3}); core::AssertTensorShape(extrinsics, {4, 4}); @@ -1001,6 +1007,12 @@ geometry::RGBDImage PointCloud::ProjectToRGBDImage( const core::Tensor &extrinsics, float depth_scale, float depth_max) { + if (!HasPointPositions()) { + utility::LogWarning( + "Called ProjectToRGBDImage on a point cloud with no Positions " + "attribute. Returning empty image."); + return geometry::RGBDImage(); + } if (!HasPointColors()) { utility::LogError( "Unable to project to RGBD without the Color attribute in the "