Open3D中点击网格时打开新窗口显示图片的实现方法
实现Open3D中点击球体弹出图片窗口的功能
要实现点击球体网格时弹出新窗口显示图片,你需要借助Open3D的可视化交互能力,通过检测鼠标点击事件并判断选中的几何体来触发图片窗口。以下是完整实现代码:
import numpy as np import open3d as o3d # 定义点击事件处理函数 def on_click(vis): # 获取选中的几何体ID picked_ids = vis.get_picked_ids() if picked_ids: # 获取选中的几何体 picked_geom = vis.get_geometry(picked_ids[0]) # 通过几何体类型+尺寸判断是否为目标球体,也可给球体设置唯一name属性来精准识别 if isinstance(picked_geom, o3d.geometry.TriangleMesh) and np.isclose(picked_geom.get_max_bound()[0], 0.3, atol=1e-2): # 加载目标图片 img = o3d.io.read_image("你的图片路径.jpg") # 创建新窗口显示图片 o3d.visualization.draw_geometries([img], window_name="图片预览") def main(): mesh = o3d.io.read_triangle_mesh(o3d.data.BunnyMesh().path) pcd1 = mesh.sample_points_poisson_disk(10000) # 使用支持几何体选择的VisualizerWithEditing类 visualizer = o3d.visualization.VisualizerWithEditing() visualizer.create_window() visualizer.add_geometry(pcd1) # 配置渲染选项 rendering_options = visualizer.get_render_option() rendering_options.show_coordinate_frame = True rendering_options.background_color = np.asarray([0.5, 0.5, 0.5]) # 创建球体并添加到窗口 sphere_mesh = o3d.geometry.TriangleMesh.create_sphere(radius=0.1) sphere_mesh.scale(scale=0.3, center=sphere_mesh.get_center()) # 可选:给球体设置唯一标识名称 # sphere_mesh.name = "clickable_sphere" visualizer.add_geometry(sphere_mesh) # 注册鼠标点击回调函数 visualizer.register_click_callback(on_click) visualizer.run() visualizer.destroy_window() if __name__ == "__main__": main()
关键实现细节说明:
- 选择VisualizerWithEditing:该类在基础Visualizer之上扩展了几何体选择功能,能通过
get_picked_ids()获取用户点击的几何体ID。 - 点击回调注册:通过
register_click_callback将自定义处理函数绑定到点击事件,用户点击窗口时自动触发逻辑。 - 球体识别逻辑:示例通过几何体类型+缩放后的尺寸判断目标球体,也可以给球体设置
name属性(如sphere_mesh.name = "target_sphere"),在回调中通过picked_geom.name == "target_sphere"来精准识别。 - 图片显示:使用
o3d.io.read_image加载本地图片,调用o3d.visualization.draw_geometries创建独立窗口显示图片,注意替换代码中的图片路径为实际路径。
内容的提问来源于stack exchange,提问作者Dang Manh Truong
相关产品推荐
相关产品推荐

