draw_geometries_with_editing按住空格键的时候同时显示当前鼠标停留点的颜色信息
时间: 2024-02-03 16:02:50 浏览: 155
好的,你的问题是关于使用Open3D库中的draw_geometries_with_editing函数,如何在按住空格键的同时显示当前鼠标停留点的颜色信息。为了实现这个功能,你需要使用Open3D中的键盘事件回调函数和鼠标事件回调函数。
具体来说,你可以使用如下代码:
```python
import open3d as o3d
import numpy as np
def color_picker(vis):
# 获取可视化窗口中的状态信息
view_ctrl = vis.get_view_control()
viewport = view_ctrl.convert_to_pinhole_camera_parameters().viewport
width, height = viewport[2], viewport[3]
x, y = int(width/2), int(height/2)
# 获取当前点云中心点的颜色
point = [x, y]
pcd = vis.get_view_control().convert_to_pinhole_camera_parameters().extrinsic @ np.append(pcd.center, 1)
pcd = pcd[:3] / pcd[3]
[k, idx, _] = pcd_tree.search_knn_vector_3d(pcd, 1)
color = np.asarray(pcd.colors[idx[0]])
# 在控制台输出颜色信息
print("Selected Color: ", color)
def mouse_picker(vis, event):
if event.button == o3d.visualization.gui.Button.Left:
if event.action == o3d.visualization.gui.ActionEvent.Release:
# 获取当前鼠标停留点的颜色
point = [event.gui_position.x, event.gui_position.y]
pcd = vis.get_view_control().convert_to_pinhole_camera_parameters().extrinsic @ np.append(pcd.center, 1)
pcd = pcd[:3] / pcd[3]
[k, idx, _] = pcd_tree.search_knn_vector_3d(pcd, 1)
color = np.asarray(pcd.colors[idx[0]])
# 在控制台输出颜色信息
print("Selected Color: ", color)
def main():
# 加载点云数据
pcd = o3d.io.read_point_cloud("cloud.pcd")
# 设置点云颜色为随机颜色
pcd.paint_uniform_color(np.random.rand(3))
# 创建点云查找树
pcd_tree = o3d.geometry.KDTreeFlann(pcd)
# 创建可视化窗口并添加点云数据
vis = o3d.visualization.Visualizer()
vis.create_window()
vis.add_geometry(pcd)
# 设置键盘事件回调函数
vis.register_key_callback(ord(' '), color_picker)
# 设置鼠标事件回调函数
vis.register_mouse_callback(mouse_picker)
# 显示可视化窗口
vis.run()
vis.destroy_window()
if __name__ == "__main__":
main()
```
在这个代码中,我们创建了一个名为mouse_picker的回调函数,它会在鼠标左键释放时被调用。在回调函数中,我们首先获取当前鼠标停留点的颜色,并在控制台输出颜色信息。最后,我们在主函数中使用register_mouse_callback函数将mouse_picker函数注册为鼠标事件回调函数,当鼠标左键释放时,mouse_picker函数会被调用。
请注意,这个示例代码仅显示了如何获取当前鼠标停留点的颜色,并在控制台输出颜色信息。如果你想要在可视化窗口中显示颜色信息,你需要使用Open3D中的可视化功能来实现。
阅读全文