起因

MMDetection3D可视化使用Open3D写的,它每显示一帧数据,都要重新关闭上一帧图形窗口,当前帧再重新生成一个,非常慢,严重影响浏览dataset的效率。

再加上自己有浏览一个文件夹下多个点云的需求,所以学习了下Open3D的官方文档,打算自己实现试一下。

功能很简单,就是逐帧显示一个文件夹下的所有点云,用按键控制切换上一帧和下一帧。

这个例子来源于Open3D官方Visualization教程中的Non-blocking visualization,同时又参考了

https://github.com/isl-org/Open3D/issues/715和https://stackoverflow.com/questions/65112433/open3d-how-to-update-point-cloud-during-window-running。

本来觉得应该会挺快,结果遇到了两个大坑。

  1. 官方给的例子中,用的是vis.update_geometry(pcd),亲测不行,点云不刷新,要用vis.add_geometry(pcd),这个地方坑了我了好久;
  2. register_key_callback(key, key_callback_function)中的key,必须是大写的,小写的按键callback按下收不到。

代码如下:

def show_pointcloud_dir(file_path):g_idx = 0vis = o3d.visualization.VisualizerWithKeyCallback()filelist = [os.path.join(file_path, f) for f in os.listdir(file_path)]def show_pointcloud(vis):nonlocal g_idxpoints = np.fromfile(filelist[g_idx], np.float32).reshape(-1, 4) # xyzipcd = o3d.geometry.PointCloud()pcd.points = o3d.utility.Vector3dVector(points[:, :3])# point_color = (0.5, 0.5, 0.5)# points_colors = np.tile(np.array(point_color), (points.shape[0], 1))# pcd.colors = o3d.utility.Vector3dVector(points_colors)vis.clear_geometries()vis.add_geometry(pcd) # fuck bug, vis.update_geometry(pcd)没有用!vis.update_renderer()vis.poll_events()def key_forward_callback(vis):nonlocal g_idxg_idx += 1if g_idx >= len(filelist):g_idx = len(filelist) - 1show_pointcloud(vis)return Truedef key_back_callback(vis):nonlocal g_idxg_idx -= 1if g_idx < 0:g_idx = 0show_pointcloud(vis)return Truevis.create_window()vis.get_render_option().point_size = 2  # set points sizevis.register_key_callback(ord(' '), key_forward_callback)  # spacevis.register_key_callback(ord('B'), key_back_callback)  # fuck bug, 字母必须是大写!vis.run()if __name__ == "__main__":show_pointcloud_dir('pointcloud_path')

一个有用的tip

显示出点云后,按h键后在命令行会打印出各种操作提示,其中按下0,1,2,3,4可以根据xyz改变点云颜色,挺有用的。

其他两个相关工具

Web visualizer and Jupyter

通过浏览器远程看dataset也很有用。

Open3D-ML

这是个专门用于机器学习的库,demo非常炫酷,用到自己dataset上应该很有用。

共勉!

Open3D键盘切换上下帧显示点云相关推荐

  1. Python: 用open3D库,连续多帧显示点云(查看localization pose的好坏)

    连续多帧显示点云,需要 点云文件 和 定位信息(IMU惯导信息),我这里是从bag包里面自己解析出来的定位信息,因为是自己写的节点,所以直接从代码里面跑出来的,不是ros官方定义的,所以没有用官方给出 ...

  2. Android键盘切换闪动原理及解决方案

    Android键盘切换闪动原理及解决方案 主要内容 键盘切换闪动原理 键盘切换闪动解决方案 设置键盘softInputMode使用adjustPan,增加一个与键盘同高的支撑视图(不推荐) 设置键盘s ...

  3. PCL:PCL可视化显示点云

    (1):引用:仅仅是简单的显示点云,可以使用CloudViewer类.这个类非常简单易用.但要注意,它不是线程安全的.如果要用于多线程,还要参考PCLVisualizer. 需要注意的是,PointC ...

  4. 为什么会显示贵州云服务器,为什么云服务器都放在贵州

    为什么云服务器都放在贵州 内容精选 换一换 在弹性公网IP资源不足的情况下,用户通过管理控制台创建一台绑定弹性公网IP的弹性云服务器,此时弹性云服务器创建成功,但是绑定弹性公网IP失败.这种情况下,弹 ...

  5. 51单片机红外电子密码锁【红外对管矩阵键盘数码管LCD1602显示模块】

    系统功能 51单片机红外电子密码锁系统主要由红外线编码电路.红外线解码开锁电路.掉电保护电路.声光提示报警电路.键盘及显示电路等组成,编写相应的程序代码并进行结果测试和仿真演示. 利用红外遥控技术和单 ...

  6. 迷你服务器开机无显示,迷你云服务器突然消失

    迷你云服务器突然消失 内容精选 换一换 在弹性公网IP资源不足的情况下,用户通过管理控制台创建一台绑定弹性公网IP的弹性云服务器,此时弹性云服务器创建成功,但是绑定弹性公网IP失败.这种情况下,弹性云 ...

  7. QT界面中实现视频帧显示的多种方法及应用

    QT界面中实现视频帧显示的多种方法及应用 (一) 引言 1.1 视频帧在QT界面中的应用场景 1.2 不同方法的性能和适用性分析 1.2.1 使用QLabel和QPixmap 1.2.2 使用QPai ...

  8. android 表情键盘切换,Android仿微信键盘切换效果

    Android 仿微信的键盘切换(录音,表情,文字,其他),IM通讯,类似朋友圈只要涉及到文字等相关的app都会要涉及到键盘的处理,今天就给大家分享一下Android 仿微信的键盘切换. 效果图如下: ...

  9. 51单片机LED点阵屏逐帧显示和流动显示图像

    上一篇逐帧显示用的是定时和中断控制,碰到了一些麻烦,我觉得也是一种不错的办法,因为Delay的时间更短,而且如果不那么介意亮度的情况甚至可以不用Delay()函数,这里采用将要显示的图像按顺序存储在数 ...

最新文章

  1. 对‘初学者应该选择哪种编程语言’的回答——计算机达人成长之路(38)
  2. 吴恩达教你读论文:持续而缓慢的学习,才是正道
  3. mongodb实验报告_Dropwizard,MongoDB和Gradle实验
  4. 图谱问答-句子向量模型部署项目总结(未完)
  5. python import io_Python——python3的io读写
  6. 计算机硬件加速怎么开,显卡硬件加速,小编教你电脑怎么开启显卡硬件加速
  7. 深入学习二叉树(四) 二叉排序树
  8. php $that,PHP中$this和$that指针使用实例
  9. [kuangbin带你飞]专题九 连通图
  10. TensorFlow 强化学习快速入门 -- Kaushik Balakrishnan 读后感
  11. Fama-French五因子模型实用攻略
  12. 一篇文章带你搞懂DEX文件的结构
  13. 7月上热搜50次!周杰伦新专辑1天1.5亿!歌手新歌爆红的营销路径
  14. 什么是 DeFi(去中心化金融)?
  15. nand2tetris 布尔函数和和门逻辑路线图
  16. 关于透明图像的滤色处理要注意的几个点
  17. 移动机器人(四)四轴飞行器
  18. excel缩字间距_“EXCEL中如何调整字间距?“excel缩小字符间距
  19. win10 旗舰版 系统激活出现 在连接到本地注册表时出现错误0x80041002 提示信息 解决方法...
  20. 小程序列表多个批量倒计时

热门文章

  1. PS小技巧 | 私刻印章是违法滴
  2. 硬件nat关闭还是开启_「Windows」到底要不要开启“快速启动”,有没有副作用?...
  3. (转载)libvirt 问题解决记录集
  4. 2012端午檀头山碧海蓝天海岛游~ ZZ
  5. CentOS安装配置DNSMasq
  6. 想要软件外包,企业开发APP和小程序如何才能不吃亏?
  7. 访问管理未来的四大趋势
  8. Java实现复杂excel格式导出
  9. 设置允许root用户登录SSH
  10. 宁德时代发布第一代钠离子电池;霍尼韦尔宣布多项全球性高管人事任命 | 美通社头条...