作者:金天
鏈接:https://zhuanlan.zhihu.com/p/57215172
來源:知乎
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。
鏈接:https://zhuanlan.zhihu.com/p/57215172
來源:知乎
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。
很多時候在python里面你要找一個3D點雲可視化的庫真的是難啊。你的選擇可能是:
- pcl
- mayavi
- matplolib
但是以上都不好用,pcl甚至沒有靠譜的python wrapper,唯一一個開源的已經很久沒有維護了。在3D顯示或者點雲處理中,效率是很重要的,不能歲歲便便用一個假的框架。此時一個由intel發布的Open3D出現了。
我在上一篇分享中也提到過open3d可以將pointnet++推理速度提速的到10fps以內。非常有用。(要知道點雲的分割可是非常好時的)。

open3d 顯示點雲的效果。它的安裝非常簡單:
pip3 install open3d-python
導入的時候打概率可能因為IPYthon導致出錯,安裝IPython就行。實力程序:
import os
import numpy as np
from open3d import *
points = np.random.rand(10000, 3)
point_cloud = PointCloud()
point_cloud.points = Vector3dVector(points)
draw_geometries([point_cloud])
Open3D的真正強大之處不在於精簡的顯示點雲,而是一些自定義的功能,這個在可視化的時候非常有用。
比如我們可以添加自定義的 draw_geometries
函數,顯示結果可以:
def custom_draw_geometry_with_key_callback(pcd):
def change_background_to_black(vis):
opt = vis.get_render_option()
opt.background_color = np.asarray([0, 0, 0])
return False
def load_render_option(vis):
vis.get_render_option().load_from_json(
"../../TestData/renderoption.json")
return False
def capture_depth(vis):
depth = vis.capture_depth_float_buffer()
plt.imshow(np.asarray(depth))
plt.show()
return False
def capture_image(vis):
image = vis.capture_screen_float_buffer()
plt.imshow(np.asarray(image))
plt.show()
return False
key_to_callback = {}
key_to_callback[ord("K")] = change_background_to_black
key_to_callback[ord("R")] = load_render_option
key_to_callback[ord(",")] = capture_depth
key_to_callback[ord(".")] = capture_image
draw_geometries_with_key_callbacks([pcd], key_to_callback)
custom_draw_geometry_with_key_callback(point_cloud)

看着還不錯。本來想顯示一下kitti點雲的。但是好像有的點是4的倍數有的是5的倍數, 這,,,這怎么reshape?