一份介绍open3d并试图做一个例子的备忘录。
撰写本文时的Open3d版本为v0.7.0.0
TL; DR
如果您现在想做一个Open3D示例,可以通过zip快速下载较旧版本的git存储库。 https://github.com/intel-isl/Open3D/tree/v0.7.0
否则,由于版本差异,该示例将无法正常工作。
你想做的事
玩open3d。在python中。
为此,我想看一下Open3D示例。
Open3d的
一个包装,当我告诉大三学生我想用Python处理几何点云时,我立刻就失望了。
Open3d的介绍
本章是主页的翻译。
http://www.open3d.org/docs/release/getting_started.html
Open3d是用于编写3d数据处理的新库。在Python和C中可用。
将此用于引文,例如论文。
1 2 3 4 5 6 | @article{Zhou2018, author = {Qian-Yi Zhou and Jaesik Park and Vladlen Koltun}, title = {{Open3D}: {A} Modern Library for {3D} Data Processing}, journal = {arXiv:1801.09847}, year = {2018}, } |
你知道这是什么吗?
Python版本安装
仅支持2.7、3.5和3.6。 3.7不支持吗?
pip
1 | pip install open3d-python |
如果您不使用虚拟环境,则必须小心。
1 2 3 4 5 | pip3 install open3d-python # or pip install --user open3d-python # or python3 -m pip install --user open3d-python |
conda
1 | conda install -c open3d-admin open3d |
open3d软件包由open3d-admin通道处理,因此请使用-c进行指定。
测试
1 | python -c "import open3d" |
教程
当我这样做时,找不到下面介绍的教程文件。 (未经许可不是DL)
rgbd_redwood.py运行一个示例,该示例读取并显示一对RGB-D图像,然后将其转换为点云并显示。
这个奇怪的名词是什么?学习要求
1 2 | cd lib/Tutorial/Basic python rgbd_redwood.py |
有关教程的具体内容,请参考每个文件。本教程使用numpy,matplotlib和opencv-python。
环境设定
我实际上是从这里做的
环境
- Windows10的
- VS2015、2019安装
- python未安装
设定
从官方页面正确安装conda。我没有通过路径,而是从conda提示符下使用code命令启动了VS Code并使用了它。
open3d仅支持python3.6,但conda的默认版本当前为3.7。我建立了一个专用环境,名称为o3d。
首先,我在启动的vscode终端中做了conda创建,但是
1 | conda create -n o3d python=3.6 |
在那之后,即使我继续使用vscode激活它,也没有任何响应。因此,在anaconda提示符下激活conda后,我重新启动了vscode。
1 2 | conda activate o3d code |
之后,我在vscode终端中使用conda安装了open3d。
1 2 | conda install -c open3d-admin open3d python -c "import open3d" |
python命令结束而没有输出,我能够确认安装已完成。
例子
我想做例子(失败)
我不确定
示例在哪里,所以我直接将它从github页面上删除并进行了尝试,但是我很生气,因为没有测试数据。
我不记得何时安装curl
1 2 | curl https://raw.githubusercontent.com/intel-isl/Open3D/master/examples/Python/Basic/python_binding.py -o python_binding.py python .\python_binding.py |
做例子(强制)
我无能为力,所以我克隆了整个存储库并获得了示例。
此方法不好。正如我稍后了解到的,似乎可以通过conda安装的版本不同于可以通过git clone获得的master分支的版本。当然不行了。
1 | git clone https://github.com/intel-isl/Open3D.git |
python_binding.py
在Open3D /示例/ Python / Basic中启动python_binding.py。
1 | python .\python_binding.py |
各种信息少而又少。我能够用两个q键完全完成它。
1 2 3 4 5 6 7 8 | geometry::PointCloud with 198835 points. Help on package open3d.open3d.visualization in open3d.open3d: NAME open3d.open3d.visualization DESCRIPTION 以下つらつら??? |
执行了以下代码。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | # examples/Python/Basic/python_binding.py import open3d as o3d def example_import_function(): pcd = o3d.io.read_point_cloud("../../TestData/ICP/cloud_bin_0.pcd") print(pcd) def example_help_function(): help(o3d) help(o3d.geometry.PointCloud) help(o3d.io.read_point_cloud) if __name__ == "__main__": example_import_function() example_help_function() |
第一行似乎是example_import_function()的执行结果,随后的几行是example_help_function()的执行结果。能够获得各种帮助的帮助可能很有趣。
file_io.py
在Open3D /示例/ Python / Basic中启动file_io.py。
1 | python .\file_io.py |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | # examples/Python/Basic/file_io.py import open3d as o3d if __name__ == "__main__": print("Testing IO for point cloud ...") pcd = o3d.io.read_point_cloud("../../TestData/fragment.pcd") print(pcd) o3d.io.write_point_cloud("copy_of_fragment.pcd", pcd) print("Testing IO for meshes ...") mesh = o3d.io.read_triangle_mesh("../../TestData/knot.ply") print(mesh) o3d.io.write_triangle_mesh("copy_of_knot.ply", mesh) print("Testing IO for images ...") img = o3d.io.read_image("../../TestData/lena_color.jpg") print(img) o3d.io.write_image("copy_of_lena_color.jpg", img) |
copy_of_fragment.pcd,copy_of_knot.ply,copy_of_lena_color.jpg由于某些原因未显示在vscode上。 (我能够通过资源管理器和目录进行确认)
当我打开copy_of_lena_color.jpg时,我看到了一个经常出现在图像处理中的女性形象。
似乎可以通过指定文件名读取文件来将其用作数据。
而且,如果将其打印,您可以看到大多数基本信息。
pointcloud.py(发生错误)
在Open3D中启动\\ Pointcloud.py /示例/ Python /基本。
1 | python .\pointcloud.py |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | # examples/Python/Basic/pointcloud.py import numpy as np import open3d as o3d if __name__ == "__main__": print("Load a ply point cloud, print it, and render it") pcd = o3d.io.read_point_cloud("../../TestData/fragment.ply") print(pcd) print(np.asarray(pcd.points)) o3d.visualization.draw_geometries([pcd]) print("Downsample the point cloud with a voxel of 0.05") downpcd = o3d.geometry.voxel_down_sample(pcd, voxel_size=0.05) o3d.visualization.draw_geometries([downpcd]) print("Recompute the normal of the downsampled point cloud") o3d.geometry.estimate_normals( downpcd, search_param=o3d.geometry.KDTreeSearchParamHybrid(radius=0.1, max_nn=30)) o3d.visualization.draw_geometries([downpcd]) print("Print a normal vector of the 0th point") print(downpcd.normals[0]) print("Print the normal vectors of the first 10 points") print(np.asarray(downpcd.normals)[:10, :]) print("") print("Load a polygon volume and use it to crop the original point cloud") vol = o3d.visualization.read_selection_polygon_volume( "../../TestData/Crop/cropped.json") chair = vol.crop_point_cloud(pcd) o3d.visualization.draw_geometries([chair]) print("") print("Paint chair") chair.paint_uniform_color([1, 0.706, 0]) o3d.visualization.draw_geometries([chair]) print("") |
我遇到了一个错误,但我不在乎。
1 | [ViewControl] SetViewPoint() failed because window height and width are not set.[ViewControl] SetViewPoint() failed because window height and width are not set. |
拖动鼠标四处移动的东西(房间?)。
似乎它以
层格式读取点云,将其转换为曲面(曲面元素),并生成可以移动的图形。
另外,如果在选择此窗口的同时按H键,则会在终端中显示帮助。
用q键退出。
这似乎是下采样的示例(我不确定这是什么),但是
1 2 3 4 | Traceback (most recent call last): File ".\pointcloud.py", line 19, in <module> downpcd = pcd.voxel_down_sample(voxel_size=0.05) AttributeError: 'open3d.open3d.geometry.PointCloud' object has no attribute 'voxel_down_sample' |
我收到一个错误,它不起作用。
看一下这个问题。
https://github.com/intel-isl/Open3D/issues/1067
我知道了,您当时查看的是错误的文档。有关master分支的文档,请最晚查看。
显然,可以通过conda安装的版本不同于可以通过git clone获得的master分支的版本。因此,似乎与conda安装的v0.7.0对应的提交为
https://github.com/intel-isl/Open3D/tree/v0.7.0
由于它是
,因此我将对此zip压缩。