1.实验目的
在两个窗口中显示点云,作为对比.
2.代码
#include <pcl/io/pcd_io.h>
#include <ctime>
#include <Eigen/Core>
#include <pcl/point_types.h>
#include <pcl/point_cloud.h>
#include <pcl/features/fpfh.h>
#include <pcl/io/pcd_io.h>
#include <pcl/io/ply_io.h>
#include <pcl/registration/ia_ransac.h>
#include <pcl/features/normal_3d.h>
#include <pcl/kdtree/kdtree_flann.h>
#include <pcl/visualization/pcl_visualizer.h>
#include <boost/thread/thread.hpp>
#include <pcl/features/fpfh_omp.h> //包含fpfh加速计算的omp(多核并行计算)
#include <pcl/registration/correspondence_estimation.h>
#include <pcl/registration/correspondence_rejection_features.h> //特征的错误对应关系去除
#include <pcl/registration/correspondence_rejection_sample_consensus.h> //随机采样一致性去除
#include <pcl/filters/voxel_grid.h>
#include <pcl/filters/approximate_voxel_grid.h>
using namespace std;
typedef pcl::PointCloud<pcl::PointXYZ> pointcloud;
typedef pcl::PointCloud<pcl::Normal> pointnormal;
int main(int argc, char** argv)
{
clock_t start, end, time;
start = clock();
pcl::PointCloud<pcl::PointXYZ>::Ptr source(new pcl::PointCloud<pcl::PointXYZ>);
pcl::PointCloud<pcl::PointXYZ>::Ptr target(new pcl::PointCloud<pcl::PointXYZ>);
if(argc != 3)
{
cerr<<"输入点云数量不对!"<<endl;
exit(1);
}
string input_filename = argv[1];
string output_filename = argv[2];
std::string format = input_filename.substr(input_filename.length()-4, 4);
//std::cout<<"pointcloud format:"<<format<<std::endl;
if(format == ".ply")
{
pcl::io::loadPLYFile(input_filename, *source);
pcl::io::loadPLYFile(output_filename, *target);
}
else if(format == ".pcd")
{
pcl::io::loadPCDFile(input_filename, *source);
pcl::io::loadPCDFile(output_filename, *target);
}
//可视化
boost::shared_ptr<pcl::visualization::PCLVisualizer> view(
new pcl::visualization::PCLVisualizer("visual"));
//view->addCoordinateSystem(1.0);
//view->initCameraParameters ();
int v1(0);
int v2(1);
view->createViewPort(0, 0.0, 0.5, 1.0, v1);
view->createViewPort(0.5, 0.0, 1.0, 1.0, v2);
view->setBackgroundColor(255, 255, 255, v1);
view->setBackgroundColor(255, 255, 255, v2);
pcl::visualization::PointCloudColorHandlerCustom<pcl::PointXYZ> sources_cloud_color(source, 250, 0, 0);
pcl::visualization::PointCloudColorHandlerCustom<pcl::PointXYZ> target_cloud_color(target, 0, 250, 0);
// v1
view->addPointCloud(source, sources_cloud_color, "sources_cloud_v1", v1);
//设置点的大小为2
//view->setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 2, "sources_cloud_v1");
//v2
view->addPointCloud(target, target_cloud_color, "target_cloud_v2", v2);
//view->setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 2, "target_cloud_v2");
view->addCoordinateSystem(10.0);
while (!view->wasStopped())
{
// view->spin();
view->spinOnce(100);
boost::this_thread::sleep(boost::posix_time::microseconds(100000));
}
return 0;
}
CmakeList.txt
cmake_minimum_required(VERSION 2.8)
project(visualization)
find_package(PCL 1.7 REQUIRED)
list(REMOVE_ITEM PCL_LIBRARIES "vtkproj4")
include_directories(${PCL_INCLUDE_DIRS})
link_directories(${PCL_LIBRARY_DIRS})
add_definitions(${PCL_DEFINITIONS})
add_executable(main "main.cpp")
target_link_libraries (main ${PCL_LIBRARIES})