前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >PCL的PNG文件和计算点云重心

PCL的PNG文件和计算点云重心

作者头像
点云PCL博主
发布2019-07-31 11:46:23
1.3K0
发布2019-07-31 11:46:23
举报
文章被收录于专栏:点云PCL点云PCL

PCL提供节约一点云的值为一个PNG图像文件的可能方案。显然,这只能用有序的点云来完成,因为生成的图像的行和列将与点云的对应完全一致。例如,如果你从一个传感器Kinect或Xtion的点云,你可以用这个来检索640x480 RGB图像匹配的点云。

就是将点云文件PCD保存成PNG文件,程序如下

代码语言:javascript
复制
#include <pcl/io/pcd_io.h>
#include <pcl/io/png_io.h>
int main(int argc, char** argv)
{    // 创建点云对象
   pcl::PointCloud<pcl::PointXYZRGB>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZRGB>);    
// 读取点云文件
   if (pcl::io::loadPCDFile<pcl::PointXYZRGB>(argv[1], *cloud) != 0)
   {        return -1;
   }    
// 保存图片,(必须为有序点云)
   pcl::io::savePNGFile("output.png", *cloud, "rgb");
}

那么这里的实验结果是根据我之前使用的用kinect获得的点云数据,他的点云可视化效果如下

保存为PNG的结果为

如果省略参数,函数将默认保存RGB域。

(2)计算点云重心

点云的重心是一个点坐标,计算出云中所有点的平均值。你可以说它是“质量中心”,它对于某些算法有多种用途。如果你想计算一个聚集的物体的实际重心,记住,传感器没有检索到从相机中相反的一面,就像被前面板遮挡的背面,或者里面的。只有面对相机表面的一部分。

代码语言:javascript
复制
#include <pcl/io/pcd_io.h>
#include <pcl/common/centroid.h>
#include <iostream>
int main(int argc, char** argv)
{    // 创建点云的对象
   pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);   
 // 读取点云
   if (pcl::io::loadPCDFile<pcl::PointXYZ>(argv[1], *cloud) != 0)
   {        return -1;
   }    

// 创建存储点云重心的对象    
    Eigen::Vector4f centroid;  
   pcl::compute3DCentroid(*cloud, centroid);
   std::cout << "The XYZ coordinates of the centroid are: ("
             << centroid[0] << ", "
             << centroid[1] << ", "
             << centroid[2] << ")." << std::endl;
}

这样就可以计算出点云的XYZ三个轴的重心的坐标值

简单的程序演示,大神请忽略

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-06-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 点云PCL 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档