点云旋转平移(三)—python open3d点云旋转
点云旋转平移介绍,请参考上一节:点云旋转平移(一)—基础知识介绍_Coding的叶子的博客-CSDN博客。
本节所使用的示例pcd点云文件请参考:pcd格式点云样例文件-深度学习文档类资源-CSDN下载。
1 python open3d点云旋转函数
open3d中点云的平移函数为rotate。其函数原型如下所示:
pcd.rotate(R, center=(20, 0, 0))
第二个参数是旋转中心,即围绕哪个点进行旋转。如果不指定center的值,默认为点云质心。围绕质心旋转后的点云质心保持不变,可以通过下面的get_center()来定义。
pcd.get_center()
第一个参数R是旋转矩阵。open3d中点云的旋转仍然是通过矩阵运算来完成的,因而需要先获取旋转矩阵。旋转矩阵可以自己进行定义,也可以根据前面博客介绍的欧拉角、旋转向量和四元数计算得到,请参考点云旋转平移(一)—基础知识介绍_Coding的叶子的博客-CSDN博客。open3d提供了这种计算的函数。
1.1 根据欧拉角计算旋转矩阵
根据欧拉角计算旋转矩阵的函数为pcd.get_rotation_matrix_from_xyz(α, β, γ)。如前面介绍的,欧拉角旋转与旋转轴的先后顺序有关。除xyz之外还有xzy、yxz、yzx、zxy和zyx等。
R = pcd.get_rotation_matrix_from_xyz((0, np.pi/2, 0))#绕y轴旋转90°
1.2 根据旋转向量(轴角)计算旋转矩阵
旋转向量用3行1列的列向量(x, y, z).T来表示。那么旋转轴为向量方向,旋转角度为向量模长。根据旋转向量计算旋转矩阵的函数为get_rotation_matrix_from_quaternion(n)。
R = pcd.get_rotation_matrix_from_axis_angle(np.array([0, -np.pi/2, 0]).T)#向量方向为旋转轴,模长等于旋转角度,绕y轴旋转-90°
1.3 根据四元数计算旋转矩阵
根据四元数计算旋转矩阵的函数为get_rotation_matrix_from_quaternion(n)。四元数用4行1列的列向量(w, x, y, z).T来表示。
R = pcd.get_rotation_matrix_from_quaternion(np.array([0, 0, 0, 1]).T)#绕x轴旋转180°
2 示例程序
注意事项:使用rotate进行点云旋转后,原始点云数据会发生变化。如果要用到旋转之前的点云,那么需要复制一份原始点云进行旋转变换。
# -*- coding: utf-8 -*-
"""
乐乐感知学堂公众号
@author: https://blog.csdn.net/suiyingy
"""
import open3d as o3d
from copy import deepcopy
import numpy as npif __name__ == '__main__':file_path = 'rabbit.pcd'pcd = o3d.io.read_point_cloud(file_path)pcd.paint_uniform_color([0.5, 0.5, 0.5])#指定显示为灰色print(pcd)print(pcd.get_center())pcd1 = deepcopy(pcd)#采用欧拉角进行旋转R = pcd.get_rotation_matrix_from_xyz((0, np.pi/2, 0))#绕y轴旋转90°pcd1.rotate(R, center=(20, 0, 0))#旋转点位于x=20处,若不指定则默认为原始点云质心。pcd1.paint_uniform_color([0, 0, 1])#指定显示为蓝色print(pcd1.get_center())print(R)#采用旋转向量(轴角)进行旋转pcd2 = deepcopy(pcd)R = pcd.get_rotation_matrix_from_axis_angle(np.array([0, -np.pi/2, 0]).T)#向量方向为旋转轴,模长等于旋转角度,绕y轴旋转-90°pcd2.paint_uniform_color([0, 1, 0])#指定显示为绿色pcd2.rotate(R, center=(20, 0, 0))#旋转点位于x=20处,若不指定则默认为原始点云质心。print(pcd2.get_center())print(R)#采用四元数进行旋转pcd3 = deepcopy(pcd)R = pcd.get_rotation_matrix_from_quaternion(np.array([0, 0, 0, 1]).T)#绕x轴旋转180°pcd3.paint_uniform_color([1, 0, 0])#指定显示为红色pcd3.rotate(R, center=(0, 10, 0))#旋转点位于y=10处,若不指定则默认为原始点云质心。print(pcd3.get_center())print(R)# 点云显示o3d.visualization.draw_geometries([pcd, pcd1, pcd2, pcd3], #点云列表window_name="点云旋转",point_show_normal=False,width=800, # 窗口宽度height=600) # 窗口高度
3 旋转效果
点云旋转平移(一)—基础知识介绍_Coding的叶子的博客-CSDN博客点云旋转平移基础知识,下一节介绍示例程序。https://blog.csdn.net/suiyingy/article/details/124374486点云旋转平移(一)—基础知识介绍_Coding的叶子的博客-CSDN博客点云旋转平移基础知识,下一节介绍示例程序。https://blog.csdn.net/suiyingy/article/details/124374486
python三维点云从基础到深度学习_Coding的叶子的博客-CSDN博客_3d点云 python从三维基础知识到深度学习,将按照以下目录持续进行更新。https://blog.csdn.net/suiyingy/article/details/124017716
更多三维、二维感知算法和金融量化分析算法请关注“乐乐感知学堂”微信公众号,并将持续进行更新。
点云旋转平移(三)—python open3d点云旋转相关推荐
- 点云旋转平移(二)—python open3d点云平移
点云旋转平移介绍,请参考上一节:点云旋转平移(一)-基础知识介绍_Coding的叶子的博客-CSDN博客. 本节所使用的示例pcd点云文件请参考:pcd格式点云样例文件-深度学习文档类资源-CSDN下 ...
- 紫光云服务器芯片,紫光云与新华三半导体共建芯片设计云2.0 携手打造一站式云端芯片平台...
原标题:紫光云与新华三半导体共建芯片设计云2.0 携手打造一站式云端芯片平台 2021年是芯片设计云元年,行业需求呈现井喷态势,中国云服务新势力脱颖而出,在世界舞台崭露头角,为中国集成电路行业发展插上 ...
- 阿里云排名第三,2019年云综合收入355.25亿元
云排名分析:阿里云排名第三,2019年云综合收入355.25亿元. 从媒体公布的阿里云在2019年收入情况来看,为52亿美元,折合人民币368亿元(2020年4月1日汇率).其中在2019年第四季度中 ...
- python open3d点云可视化(本节会根据实际所用持续更新)
本文为博主原创文章,未经博主允许不得转载. 本文为专栏<python三维点云从基础到深度学习>系列文章,地址为"https://blog.csdn.net/suiyingy/ar ...
- 2020年第11期公有云性能评测:盛大云-华东实现“三冠”,百度云虎视眈眈
本评测报告致力于呈现各行业的整体性能概况,为广大运营商及网民决策提供重要参考依据.目前,测评内容包含北京机房网络质量.云主机性能.券商App行情刷新速度及银行App性能等. 在2020年11月云主机性 ...
- Trimble RealWorks处理点云数据(三)之点云抽稀取样
Trimble RealWorks处理点云数据(二)之点云切割 背景 对于点云数据来说,数据量大是常见的事,但是有些软件不能一次加载大量的数据,在某些情况下,是可以通过对点云数据进行抽稀来达到减少点云 ...
- python生成中文词云的代码_[python] 基于词云的关键词提取:wordcloud的使用、源码分析、中文词云生成和代码重写...
1. 词云简介 词云,又称文字云.标签云,是对文本数据中出现频率较高的"关键词"在视觉上的突出呈现,形成关键词的渲染形成类似云一样的彩色图片,从而一眼就可以领略文本数据的主要表达意 ...
- python 横坐标旋转_球坐标/python实现中的旋转问题
正如我在评论中提到的,我不认为围绕x,y,和{}旋转是最聪明的解决方案,如果你真的想绕一个任意的轴旋转.所以我用四元数.这实际上使用了x.y.z向量,但是qubit解决方案也使用了所有的sine.at ...
- 用python生成云词汇_用python生成词云wordcloud
代码如下: import wordcloud import jieba excludes={"将军","却说","二人","不可& ...
最新文章
- 软件测试面试必备的一些基础理论概念
- 统计学习方法笔记(李航)———第四章(朴素贝叶斯法)
- 我的设计模式之旅(1)——学习的原则和一些笔记
- iOS追踪设备和用户
- 小甲鱼Python第十九讲课后习题
- 【STM32+cubemx】0029 HAL库开发:HMC5883L磁力计的应用(电子指南针)
- LintCode 交叉字符串
- Labview温度采集系统
- excel常用快捷键excel快捷键汇总
- 百度云盘客户端去除顶部广告
- 阿里icon使用fontclass
- 点亮了中行U盾12864屏线 12液晶,附12864详细手册
- 纹理(讲得比较详细的文章)
- 一键激活windows系统与office(绿色无捆绑装机员激活工具)
- MySQL服务器地址为空,win10 mysql没有服务器地址
- android getpixel函数,关于Graphics.Blit函数在android上的巨坑
- 时间的流逝,流逝了谁的无奈?
- 《Android Studio 实战》总结一
- Java虚拟机这一块 —— 深入理解java虚拟机(jvm)
- 云破月来花弄影-SVG多种技术组合实现
热门文章
- 使用IE浏览器,禁止访问,显示 Internet Explorer增强安全配置正在阻止来自下列网站的从应用程序中的内容
- ubuntu设置时间为utc标准时间
- 编程语言学习——0基础C语言入门
- selenium webdriver (python)的基本用法一
- mysql 用sql语句创建数据库和表
- HDU 2014 青年歌手大奖赛_评委会打分
- 怎样在Word中存储高清图,并输出PDF
- GPT时代,最令人担心的其实是“塔斯马尼亚效应”
- spring的两大核心
- linux中的find查找文件或者目录、locate快速定位文件路径