1、测试程序
#include <iostream>
#include <vector>
#include <pcl/io/pcd_io.h>
#include <pcl/point_types.h>
#include <pcl/ModelCoefficients.h>
#include <pcl/filters/extract_indices.h>
using namespace std;
int main()
{
pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);
pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_p(new pcl::PointCloud<pcl::PointXYZ>);
cloud->width = 5;
cloud->height = 1;
cloud->points.resize (cloud->width * cloud->height);
for (size_t i = 0; i < cloud->points.size (); ++i)
{
cloud->points[i].x = 1024 * rand () / (RAND_MAX + 1.0f);
cloud->points[i].y = 1024 * rand () / (RAND_MAX + 1.0f);
cloud->points[i].z = 1024 * rand () / (RAND_MAX + 1.0f);
}
std::cout << "Cloud before extract: " << std::endl;
for (size_t i = 0; i < cloud->points.size (); ++i)
std::cout << " " << cloud->points[i].x << " "
<< cloud->points[i].y << " "
<< cloud->points[i].z << std::endl;
std::vector<int> index = {1,3,4};//提取1,3,4位置处点云
boost::shared_ptr<std::vector<int>> index_ptr = boost::make_shared<std::vector<int>>(index);
// Create the filtering object
pcl::ExtractIndices<pcl::PointXYZ> extract;
// Extract the inliers
extract.setInputCloud (cloud);
extract.setIndices (index_ptr);
extract.setNegative (true);//true: 取index以外的点云; false:取index内的点云
extract.filter (*cloud_p);
cout<<"----------------"<<endl;
for (size_t i = 0; i < cloud_p->points.size (); ++i)
std::cout << " " << cloud_p->points[i].x << " "
<< cloud_p->points[i].y << " "
<< cloud_p->points[i].z << std::endl;
}
CMakeLists.txt
cmake_minimum_required(VERSION 2.8)
project(cpptest)
#find_package(OpenCV REQUIRED)
set(CMAKE_CXX_STANDARD 14)
find_package(PCL 1.8 REQUIRED)
include_directories(
/usr/include/pcl-1.8/
/usr/include
/usr/include/eigen3/
)
#link_directories(${PCL_LIBRARY_DIRS})
add_executable(test cpptest.cpp)
target_link_libraries(test ${PCL_LIBRARIES})