arthur
arthur

Reputation: 21

Open3d Python, Type error using TriangleMesh.create_from_point_cloud_alpha_shape()

I am trying to use open3d to create an "alphahull" around a set of 3d points using TriangleMesh. However I get a TypeError.

import open3d as o3d
import numpy as np 

xx =np.asarray([[10,21,18], [31,20,25], [36,20,24], [33,19,24], [22,25,13], [25,19,24], [22,26,10],[29,19,24]])

cloud = o3d.geometry.PointCloud()
cloud.points = o3d.utility.Vector3dVector(xx)
mesh = o3d.geometry.TriangleMesh.create_from_point_cloud_alpha_shape(pcd=cloud, alpha=10.0)

output:

    Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: create_from_point_cloud_alpha_shape(): incompatible function arguments. The following argument types are supported:
1. (pcd: open3d.open3d.geometry.PointCloud, alpha: float, tetra_mesh: open3d::geometry::TetraMesh, pt_map: List[int]) -> open3d.open3d.geometry.TriangleMesh

The error says the object I am passing the function is the wrong type. But when I check the type I get this:

>>print(type(cloud))
<class 'open3d.open3d.geometry.PointCloud'>

Please can someone help me with this error?

Note: A comment on this post Python open3D no attribute 'create_coordinate_frame' suggested it might be a problem with the installation and that a solution was to compile the library from source. So I compiled the library from source. After this ran make install-pip-package. Though I am not sure it completed correctly because I couldn't import open3d in python yet; see output of installation: https://pastebin.com/sS2TZfTL (I wasn't sure if that command was supposed to complete the installation, or if you were still required to run pip? After I ran python3 -m pip install Open3d I could import the library in python.)

Upvotes: 2

Views: 4208

Answers (1)

e_d_n_a
e_d_n_a

Reputation: 1

Bug in bindings of current release (v0.9.0):

https://github.com/intel-isl/Open3D/issues/1621

Fix for master:

https://github.com/intel-isl/Open3D/pull/1624

Workaround:

tetra_mesh, pt_map = o3d.geometry.TetraMesh.create_from_point_cloud(pcd)
mesh = o3d.geometry.TriangleMesh.create_from_point_cloud_alpha_shape(pcd, alpha, tetra_mesh, pt_map)

Upvotes: 0

Related Questions