PCL:点云平移、旋转
PCL提供了两种点云平移、旋转的方式
- 方式1:使用Matrix4f手动输入坐标平移、旋转矩阵,理解更直观,但易出错
- 方式2:使用Affine3f定义坐标平移、旋转矩阵,简单且不易出错
代码实现:
#include <iostream>
#include <pcl/io/pcd_io.h>
#include <pcl/point_cloud.h>
#include <pcl/common/transforms.h>
#include <pcl/visualization/pcl_visualizer.h>int main()
{pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);pcl::PointCloud<pcl::PointXYZ>::Ptr transformed_cloud(new pcl::PointCloud<pcl::PointXYZ>);if (pcl::io::loadPCDFile("1.pcd", *cloud) < 0){PCL_ERROR("目标文件不存在!\n");return -1;}/// 方式1:Matrix4f// 创建矩阵对象transform_1,初始化为4×4单位阵Eigen::Matrix4f transform_1 = Eigen::Matrix4f::Identity();// 定义旋转矩阵,绕z轴float theta = M_PI / 4; // 旋转弧度transform_1(0, 0) = cos(theta);transform_1(0, 1) = -sin(theta);transform_1(1, 0) = sin(theta);transform_1(1, 1) = cos(theta);// 定义在x轴上的平移,2.5mtransform_1(0, 3) = 2.5;// 打印平移、旋转矩阵std::cout << "方式1: 使用Matrix4f\n";std::cout << transform_1 << std::endl;/// 方式2:Affine3f// 创建矩阵对象transform_2.matrix(),初始化为4×4单位阵Eigen::Affine3f transform_2 = Eigen::Affine3f::Identity();// 定义在x轴上的平移,2.5mtransform_2.translation() << 2.5, 0.0, 0.0; // 三个数分别对应X轴、Y轴、Z轴方向上的平移// 定义旋转矩阵,绕z轴transform_2.rotate(Eigen::AngleAxisf(theta, Eigen::Vector3f::UnitZ())); //同理,UnitX(),绕X轴;UnitY(),绕Y轴.// 打印平移、旋转矩阵std::cout << "\n方式2: 使用Affine3f\n";std::cout << transform_2.matrix() << std::endl; //注意:不是transform_2/// 执行转换// transform_1 或者 transform_2 都可以实现相同的转换pcl::transformPointCloud(*cloud, *transformed_cloud, transform_2); //注意:不是transform_2.matrix()// Visualization可视化std::cout << "点云颜色:\n";std::cout << "原始点云:白色\n" << "平移、旋转后点云:红色\n";pcl::visualization::PCLVisualizer viewer("矩阵转换实例");/// 定义点云RGB颜色// 原始点云附色pcl::visualization::PointCloudColorHandlerCustom<pcl::PointXYZ> cloud_color(cloud, 255, 255, 255);viewer.addPointCloud(cloud, cloud_color, "original_cloud");// 变换后点云附色pcl::visualization::PointCloudColorHandlerCustom<pcl::PointXYZ> transformed_cloud_color(transformed_cloud, 250, 0, 0);viewer.addPointCloud(transformed_cloud, transformed_cloud_color, "transformed_cloud");viewer.addCoordinateSystem(1.0, "cloud", 0); //定义坐标系viewer.setBackgroundColor(0.05, 0.05, 0.05, 0); // 设置背景颜色viewer.setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 2, "original_cloud");viewer.setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 2, "transformed_cloud");//viewer.setPosition(800, 400); // 设置可视化窗口位置while (!viewer.wasStopped()){ // Display the visualiser until 'q' key is pressedviewer.spinOnce();}return 0;
}
PCL:点云平移、旋转相关推荐
- PCL 点云的旋转与平移
PCL提供了两种点云平移.旋转的方式 方式1:使用Matrix4f手动输入坐标平移.旋转矩阵,理解更直观,但易出错 方式2:使用Affine3f定义坐标平移.旋转矩阵,简单且不易出错 代码实现: #i ...
- PCL点云的旋转平移矩阵
目录 (一)左乘右乘 1.左乘 2.右乘 (二)旋转平移矩阵公式 1.绕X轴逆时针旋转角度θ 2.绕Y轴逆时针旋转角度θ 3.绕Z轴逆时针旋转角度θ 4.平移 (三)旋转平移矩阵的逆 (四)PCL实现 ...
- PCL 点云平移与旋转
这个博主写的很好,推荐大家看看其系列文章 链接:http://www.pianshen.com/tag/PCL/ #include <iostream>#include <pcl/i ...
- PCL点云处理算法目录
一.点云配准 PCL中的点云配准方法:https://www.sohu.com/a/321034987_715754 点云配准资源汇总:https://mp.weixin.qq.com/s/rj090 ...
- 《PCL点云库学习VS2010(X64)》Part 34 旋转平移矩阵用法
<PCL点云库学习&VS2010(X64)>Part 34 旋转平移矩阵用法 1.变换与投影矩阵讲解: https://en.wikipedia.org/wiki/Transfor ...
- 点云处理--点云平移和旋转
1.版本要求 版本: >PCL1.5 2.简介 1)有时我们需要平移点云到我们需要的位置,例如:进行ICP配准前需要移动待配准点云到目标点云附近. 2)有时我们需要旋转点云到我们需要的位置. 3 ...
- 点云旋转平移(二)—python open3d点云平移
点云旋转平移介绍,请参考上一节:点云旋转平移(一)-基础知识介绍_Coding的叶子的博客-CSDN博客. 本节所使用的示例pcd点云文件请参考:pcd格式点云样例文件-深度学习文档类资源-CSDN下 ...
- PCL点云变换与移除NaN
对点云的操作可以直接应用变换矩阵,即旋转,平移,尺度,3D的变换就是要使用4*4 的矩阵,例如: 等等模型 在这里直接使用程序开实现一个点云的旋转,新建文件matrix.cpp #incl ...
- PCL 点云特征描述与提取
点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 作者:开着拖拉机唱山歌 链接:https://zhuanlan.zhihu.com/p/1032192 ...
最新文章
- 8核32g mysql性能_MySQL性能优化之参数配置
- js-移动端android浏览器中input框被软键盘遮住的问题解决方案
- boost.asio系列——io_service
- 简化 Hadoop 2.4.1 Eclpse 插件编译【原创】
- PID控制器改进笔记之三:改进PID控制器之正反作用
- IDEA项目创建Mapper的xml文件的方法
- VOC2007和COCOmAP计算
- spring cloud拓扑图
- MapGIS 的一些小总结
- 程序员慵懒的周末:不想出门还想吃肯德基香辣鸡翅?
- cs字体样式和盒子模型学习1
- 写给一个外汇女交易员的信(连载六)
- 5G聚合路由器助力无人机监控盲区打好疫情阻击战
- Processing基础---绘制基本图形、颜色
- 神奇的口袋(回溯DP)
- OpenMV扫码识别
- 小程序Promise不支持finally解决方案
- GO语言与其他语言初步比较
- typecho 不能上传附件,上传附件失败
- Scrapy框架之Crawlspider的使用