Open3D键盘切换上下帧显示点云
起因
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。
本来觉得应该会挺快,结果遇到了两个大坑。
- 官方给的例子中,用的是vis.update_geometry(pcd),亲测不行,点云不刷新,要用vis.add_geometry(pcd),这个地方坑了我了好久;
- 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
Open3D-ML
这是个专门用于机器学习的库,demo非常炫酷,用到自己dataset上应该很有用。
Open3D键盘切换上下帧显示点云相关推荐
- Python: 用open3D库,连续多帧显示点云(查看localization pose的好坏)
连续多帧显示点云,需要 点云文件 和 定位信息(IMU惯导信息),我这里是从bag包里面自己解析出来的定位信息,因为是自己写的节点,所以直接从代码里面跑出来的,不是ros官方定义的,所以没有用官方给出 ...
- Android键盘切换闪动原理及解决方案
Android键盘切换闪动原理及解决方案 主要内容 键盘切换闪动原理 键盘切换闪动解决方案 设置键盘softInputMode使用adjustPan,增加一个与键盘同高的支撑视图(不推荐) 设置键盘s ...
- PCL:PCL可视化显示点云
(1):引用:仅仅是简单的显示点云,可以使用CloudViewer类.这个类非常简单易用.但要注意,它不是线程安全的.如果要用于多线程,还要参考PCLVisualizer. 需要注意的是,PointC ...
- 为什么会显示贵州云服务器,为什么云服务器都放在贵州
为什么云服务器都放在贵州 内容精选 换一换 在弹性公网IP资源不足的情况下,用户通过管理控制台创建一台绑定弹性公网IP的弹性云服务器,此时弹性云服务器创建成功,但是绑定弹性公网IP失败.这种情况下,弹 ...
- 51单片机红外电子密码锁【红外对管矩阵键盘数码管LCD1602显示模块】
系统功能 51单片机红外电子密码锁系统主要由红外线编码电路.红外线解码开锁电路.掉电保护电路.声光提示报警电路.键盘及显示电路等组成,编写相应的程序代码并进行结果测试和仿真演示. 利用红外遥控技术和单 ...
- 迷你服务器开机无显示,迷你云服务器突然消失
迷你云服务器突然消失 内容精选 换一换 在弹性公网IP资源不足的情况下,用户通过管理控制台创建一台绑定弹性公网IP的弹性云服务器,此时弹性云服务器创建成功,但是绑定弹性公网IP失败.这种情况下,弹性云 ...
- QT界面中实现视频帧显示的多种方法及应用
QT界面中实现视频帧显示的多种方法及应用 (一) 引言 1.1 视频帧在QT界面中的应用场景 1.2 不同方法的性能和适用性分析 1.2.1 使用QLabel和QPixmap 1.2.2 使用QPai ...
- android 表情键盘切换,Android仿微信键盘切换效果
Android 仿微信的键盘切换(录音,表情,文字,其他),IM通讯,类似朋友圈只要涉及到文字等相关的app都会要涉及到键盘的处理,今天就给大家分享一下Android 仿微信的键盘切换. 效果图如下: ...
- 51单片机LED点阵屏逐帧显示和流动显示图像
上一篇逐帧显示用的是定时和中断控制,碰到了一些麻烦,我觉得也是一种不错的办法,因为Delay的时间更短,而且如果不那么介意亮度的情况甚至可以不用Delay()函数,这里采用将要显示的图像按顺序存储在数 ...
最新文章
- ADS 2013安装教程
- 一个图片展示效果的站点
- 【渝粤教育】国家开放大学2019年春季 0233-22T学前儿童语言教育 参考试题
- Python工作笔记-仿大佬的list赋值
- 四.树莓派更改输入法与支持中文
- 《重大技术需求征集系统》项目目标文档
- python画图颜色代码rgb_python – matplotlib 3D散点图,其标记颜色对应于RGB值
- mysql维护分区脚本_MySQL 分区表脚本
- 360网络修复大师_360补丁大师免安装下载-360补丁大师下载 v8.0 官方最新版
- Eplan2.7 安装教程
- C++写的12306抢票软件
- sqlplus 命令登录 Oracle
- 怎么自己制作返利机器人教程分享
- 使用微信开发工具开发微信小程序(二)——协同工作、发布与事件绑定
- 夯实数据库根科技,提升企业数智化转型的“人效”和“能效” | 数据猿
- 谷歌浏览器不支持ocx控件
- 京东到家机器学习平台建设
- IDEA快速移动光标到行首或行尾;
- ipa在线安装搭建_iOS12.4.1 越狱无法安装?教你百分百安装
- 18 款低代码平台!开发解放双手
热门文章
- c语言尾插法步骤,C语言尾插法链表
- Java“彭于晏,kafka教程
- leetcode 回溯算法 17. 电话号码的字母组合
- 7款短视频创作必备软件分享,在家用手机就能做,每月收益4千+
- 卡片IOT板开发计划
- 计算机二级access分数分布_计算机二级access评分标准
- 计算机网络 - 练习(二百三十三)
- 金融行业需要什么样的数据库?
- 计算机配件价格报告,2021年电脑配件行业趋势_2021年电脑配件行业趋势报告_中国报告大厅...
- 破解网络尖兵(真正对付限制ADSL路由共享的方法)