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

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

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

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

#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)计算点云重心

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

#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三个轴的重心的坐标值

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

微信公众号号可扫描二维码一起共同学习交流

相关文章
|
算法 数据处理
点云地面点滤波(Progressive Morphological Filter)算法介绍(PCL库)
点云地面点滤波(Progressive Morphological Filter)算法介绍(PCL库)
854 0
点云地面点滤波(Progressive Morphological Filter)算法介绍(PCL库)
|
存储 算法 定位技术
PCL--点云配准--ICP使用
PCL--点云配准--ICP使用
PCL--点云配准--ICP使用
|
4月前
|
监控 计算机视觉
[MFC] 绘制图像ROI区域(OpenCv库)
[MFC] 绘制图像ROI区域(OpenCv库)
30 0
|
9月前
ENVI Classic:如何加载栅格数据(Img/DEM)和矢量数据(evf of ROI)?
ENVI Classic:如何加载栅格数据(Img/DEM)和矢量数据(evf of ROI)?
268 0
|
6月前
|
计算机视觉
OpenCV-扩充图像边界cv::copyMakeBorder
OpenCV-扩充图像边界cv::copyMakeBorder
|
数据可视化 云计算
PCL关键点检测--Harris关键点
PCL关键点检测--Harris关键点
PCL关键点检测--Harris关键点
|
数据可视化 算法
|
计算机视觉
使用opencv读入并显示一幅彩色图像,灰度化并显示,用canny算子得到图像边缘并显示
使用opencv读入并显示一幅彩色图像,灰度化并显示,用canny算子得到图像边缘并显示
193 0
使用opencv读入并显示一幅彩色图像,灰度化并显示,用canny算子得到图像边缘并显示
|
计算机视觉 数据可视化 异构计算
Kinect2.0+Libfreenect2+PCL:实时点云显示
写在前面:生成点云前提是已经安装好了libfreenect2和PCL,网上有许多这方面的大把教程,在这里就不多赘述了。 -->ubuntu16.04,pcl1.8points.push_back( p );//将点P存入cloud 4,viewer.showCloud (cloud);//将cloud可视化 注意:将下列两个文件复制到同一个文件夹中,并在终端中依次执行cmake .,make,便会生成一个可执行文件main,输入./main,就可以显示点云,如果是一片漆黑,是因为我在代码中设置来点云的范围,将if语句去掉即可。
3405 0

热门文章

最新文章