コード
#include "stdafx.h"
#include <iostream>
#include <boost/thread/thread.hpp>
#include <pcl/common/common_headers.h>
#include <pcl/features/normal_3d.h>
#include <pcl/io/pcd_io.h>
void centroid(pcl::PointCloud<pcl::PointXYZ>::Ptr cloud)
{
Eigen::Vector4f xyz_centroid;
pcl::compute3DCentroid(*cloud, xyz_centroid);//重心を計算
for(size_t i = 0; i < cloud->points.size(); i++){
cloud->points[i].x = cloud->points[i].x - xyz_centroid[0];//X座標の移動
cloud->points[i].y = cloud->points[i].y - xyz_centroid[1];//Y座標の移動
cloud->points[i].z = cloud->points[i].z - xyz_centroid[2];//Z座標の移動
}
}
int _tmain(int argc, _TCHAR* argv[])
{
pcl::PointCloud<pcl::PointXYZ>::Ptr cloud (new pcl::PointCloud<pcl::PointXYZ>);
pcl::io::loadPCDFile(argv[1], *cloud);
centroid(cloud);//重心計算+移動の関数に点群を渡す。
std::stringstream Filename;
std::string name;
name = argv[1];
name.erase(name.length()-4);
Filename << name << "_C.pcd";//最初に渡されたファイル名の末尾に_Cを付加する
pcl::io::savePCDFileBinary(Filename.str(),*cloud);
}
このコードは前回のViewerのように引数にPCDファイルを読み込み、重心を座標(0,0,0)に移動後、別名で保存する。保存時のファイル名は引数で渡したファイル名の末尾に「_C」を加える
0 件のコメント:
コメントを投稿