PCL的PNG文件和计算点云重心
生活随笔
收集整理的這篇文章主要介紹了
PCL的PNG文件和计算点云重心
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
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三個軸的重心的坐標值
?簡單的程序演示,大神請忽略,
微信公眾號號可掃描二維碼一起共同學習交流
總結
以上是生活随笔為你收集整理的PCL的PNG文件和计算点云重心的全部內容,希望文章能夠幫你解決所遇到的問題。