vs2015+pcl1.8.0将点云旋转平移一定的角度

#include <pcl/io/pcd_io.h>
#include <pcl/io/ply_io.h>
#include <pcl/point_types.h>
#include <pcl/point_cloud.h>
#include <pcl/common/transforms.h>
#include <pcl/filters/passthrough.h>
#include<pcl/common/common.h>
#include <pcl/visualization/pcl_visualizer.h>
#include <pcl/visualization/cloud_viewer.h>

typedef pcl::PointXYZRGB PointT; PointXYZ-->PointXYZRGB
typedef pcl::PointCloud<PointT> PointCloud;

// 旋转矩阵的具体定义 (请参考 https://en.wikipedia.org/wiki/Rotation_matrix)

int
main(int argc, char** argv)
{
//输入ply
    std::string src_cloud_path = "pointCloud_trunc_passthroughed_.ply";
    PointCloud::Ptr cloud_in(new PointCloud);
    pcl::io::loadPLYFile(src_cloud_path, *cloud_in);

//点云旋转
    PointCloud::Ptr cloud_icp(new PointCloud);//目标点云

    double theta = M_PI / 20;  // 设置旋转弧度的角度
    Eigen::Matrix4f transformation_matrix = Eigen::Matrix4f::Identity();//设置旋转矩阵

    transformation_matrix(0, 0) = cos(theta);
    transformation_matrix(0, 1) = -sin(theta);
    transformation_matrix(1, 0) = sin(theta);
    transformation_matrix(1, 1) = cos(theta);

    // 设置平移矩阵
    transformation_matrix(0, 3) = 0.0;
    transformation_matrix(1, 3) = 0.0;
    transformation_matrix(2, 3) = 4.0;

    // 执行初始变换
    pcl::transformPointCloud(*cloud_in, *cloud_icp, transformation_matrix);

    //可视化单个点云
    pcl::visualization::PCLVisualizer viewer("registration Viewer");
    viewer.addPointCloud(cloud_icp, "source cloud");

    //执行一个 while 循环,每次调用 spinOnce 都给视窗处理事件的时间,允许鼠标键盘等交互操作
    while (!viewer.wasStopped())
    {
        viewer.spinOnce(100);
        boost::this_thread::sleep(boost::posix_time::microseconds(10000));
    }
    pcl::io::savePLYFile("cartman_passed_rotated_trans.ply", *cloud_icp);

    return (0);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值