[笔记]配置PCL点云库的CMakeLists.txt

修改之后的3rdparty目录结构:

D:\VS_workspace\PCL_cmakeProj>tree.exe -L 3
.
|-- 3rdparty
|   |-- BOOST-1.78
|   |   |-- bin
|   |   |-- include
|   |   `-- lib
|   |-- Boost
|   |   |-- include
|   |   `-- lib
|   |-- Eigen
|   |   `-- eigen3
|   |-- FLANN
|   |   |-- bin
|   |   |-- include
|   |   `-- lib
|   |-- OpenNI2
|   |   |-- Redist
|   |   |-- include
|   |   `-- lib
|   |-- PCL-1.12.1
|   |   |-- bin
|   |   |-- include
|   |   `-- lib
|   |-- Qhull
|   |   |-- bin
|   |   |-- include
|   |   |-- lib
|   |   `-- share
|   `-- VTK
|       |-- bin
|       |-- include
|       `-- lib
|-- CMakeLists.txt
|-- CMakeSettings.json
|-- PCL_Demo
|   |-- inc
|   |-- src
|   `-- unit_test
|       `-- main.cpp
|-- README.txt
`-- out
    `-- build
        `-- x64-Release

38 directories, 4 files

其中BOOST-1.78是新的,Boost是PCL自带的,在CMakeLists.txt中注释掉了。CMakeLists.txt:

# CMakeList.txt: 顶层 CMake 项目文件,在此处执行全局配置
# 并包含子项目。
#
cmake_minimum_required (VERSION 3.10)

project ("PCL_CMAKE_PROJECT" LANGUAGES CXX CUDA)

add_definitions(-DBOOST_USE_WINDOWS_H -DBOOST_ALL_NO_LIB  -DNOMINMAX -D_CRT_SECURE_NO_DEPRECATE)

SET(3RDPARTY_ROOT ./3rdparty)
SET(PCL_Demo_ROOT ./PCL_Demo)

SET(INC_DIR 
	${3RDPARTY_ROOT}/Boost/include/boost-1_78  # PCL自带的Boost
	#${3RDPARTY_ROOT}/BOOST-1.78/include  # 从下载的exe文件中提取出的BOOST库
	${3RDPARTY_ROOT}/Eigen/eigen3
	${3RDPARTY_ROOT}/FLANN/include
	${3RDPARTY_ROOT}/OpenNI2/include
	${3RDPARTY_ROOT}/PCL-1.12.1/include/pcl-1.12
	${3RDPARTY_ROOT}/Qhull/include
	${3RDPARTY_ROOT}/VTK/include/vtk-9.1
)

SET(LIB_DIR
	#${3RDPARTY_ROOT}/Boost/lib  # PCL自带的Boost,使用静态库链接,不需要${3RDPARTY_ROOT}/Boost/lib
	#${3RDPARTY_ROOT}/BOOST-1.78/lib  # 从下载的exe文件中提取出的BOOST库
	${3RDPARTY_ROOT}/FLANN/lib
	${3RDPARTY_ROOT}/OpenNI2/lib
	${3RDPARTY_ROOT}/PCL-1.12.1/lib
	${3RDPARTY_ROOT}/Qhull/lib
	${3RDPARTY_ROOT}/VTK/lib
)

# 设置(使用)boost静态库
SET(BOOST_STATIC_LIBS
	libboost_atomic-vc142-mt-x64-1_78.lib
	libboost_bzip2-vc142-mt-x64-1_78.lib
	libboost_chrono-vc142-mt-x64-1_78.lib
	libboost_container-vc142-mt-x64-1_78.lib
	libboost_context-vc142-mt-x64-1_78.lib
	libboost_contract-vc142-mt-x64-1_78.lib
	libboost_coroutine-vc142-mt-x64-1_78.lib
	libboost_date_time-vc142-mt-x64-1_78.lib
	libboost_exception-vc142-mt-x64-1_78.lib
	libboost_filesystem-vc142-mt-x64-1_78.lib
	libboost_graph_parallel-vc142-mt-x64-1_78.lib
	libboost_graph-vc142-mt-x64-1_78.lib
	libboost_iostreams-vc142-mt-x64-1_78.lib
	libboost_json-vc142-mt-x64-1_78.lib
	libboost_locale-vc142-mt-x64-1_78.lib
	libboost_log_setup-vc142-mt-x64-1_78.lib
	libboost_log-vc142-mt-x64-1_78.lib
	libboost_math_c99f-vc142-mt-x64-1_78.lib
	libboost_math_c99l-vc142-mt-x64-1_78.lib
	libboost_math_c99-vc142-mt-x64-1_78.lib
	libboost_math_tr1f-vc142-mt-x64-1_78.lib
	libboost_math_tr1l-vc142-mt-x64-1_78.lib
	libboost_math_tr1-vc142-mt-x64-1_78.lib
	libboost_mpi-vc142-mt-x64-1_78.lib
	libboost_nowide-vc142-mt-x64-1_78.lib
	libboost_numpy38-vc142-mt-x64-1_78.lib
	libboost_prg_exec_monitor-vc142-mt-x64-1_78.lib
	libboost_program_options-vc142-mt-x64-1_78.lib
	libboost_python38-vc142-mt-x64-1_78.lib
	libboost_random-vc142-mt-x64-1_78.lib
	libboost_regex-vc142-mt-x64-1_78.lib
	libboost_serialization-vc142-mt-x64-1_78.lib
	libboost_system-vc142-mt-x64-1_78.lib
	libboost_test_exec_monitor-vc142-mt-x64-1_78.lib
	libboost_thread-vc142-mt-x64-1_78.lib
	libboost_timer-vc142-mt-x64-1_78.lib
	libboost_type_erasure-vc142-mt-x64-1_78.lib
	libboost_unit_test_framework-vc142-mt-x64-1_78.lib
	libboost_wave-vc142-mt-x64-1_78.lib
	libboost_wserialization-vc142-mt-x64-1_78.lib
	libboost_zlib-vc142-mt-x64-1_78.lib)
# 设置(使用)boost动态库
SET(BOOST_LIBS    # 从下载的exe文件中提取出的BOOST库
	boost_atomic-vc142-mt-x64-1_78
	boost_bzip2-vc142-mt-x64-1_78
	boost_chrono-vc142-mt-x64-1_78
	boost_container-vc142-mt-x64-1_78
	boost_context-vc142-mt-x64-1_78
	boost_contract-vc142-mt-x64-1_78
	boost_coroutine-vc142-mt-x64-1_78
	boost_date_time-vc142-mt-x64-1_78
	boost_filesystem-vc142-mt-x64-1_78
	boost_graph-vc142-mt-x64-1_78
	boost_iostreams-vc142-mt-x64-1_78
	boost_json-vc142-mt-x64-1_78
	boost_locale-vc142-mt-x64-1_78
	boost_log_setup-vc142-mt-x64-1_78
	boost_log-vc142-mt-x64-1_78
	boost_math_c99f-vc142-mt-x64-1_78
	boost_math_c99l-vc142-mt-x64-1_78
	boost_math_c99-vc142-mt-x64-1_78
	boost_math_tr1f-vc142-mt-x64-1_78
	boost_math_tr1l-vc142-mt-x64-1_78
	boost_math_tr1-vc142-mt-x64-1_78
	boost_nowide-vc142-mt-x64-1_78
	boost_prg_exec_monitor-vc142-mt-x64-1_78
	boost_program_options-vc142-mt-x64-1_78
	boost_python310-vc142-mt-x64-1_78
	boost_random-vc142-mt-x64-1_78
	boost_regex-vc142-mt-x64-1_78
	boost_serialization-vc142-mt-x64-1_78
	boost_system-vc142-mt-x64-1_78
	boost_thread-vc142-mt-x64-1_78
	boost_timer-vc142-mt-x64-1_78
	boost_type_erasure-vc142-mt-x64-1_78
	boost_unit_test_framework-vc142-mt-x64-1_78
	boost_wave-vc142-mt-x64-1_78
	boost_wserialization-vc142-mt-x64-1_78
	boost_zlib-vc142-mt-x64-1_78)
SET(FLANN_LIBS flann flann_cpp)
SET(OPENNI2_LIBS OpenNI2)
SET(PCL_LIBS 
	pcl_common 
	pcl_features 
	pcl_filters 
	pcl_io 
	pcl_io_ply 
	pcl_kdtree 
	pcl_keypoints 
	pcl_ml 
	pcl_octree
	pcl_outofcore 
	pcl_people
	pcl_recognition 
	pcl_registration 
	pcl_sample_consensus
	pcl_search 
	pcl_segmentation 
	pcl_stereo
	pcl_surface 
	pcl_tracking
	pcl_visualization)
SET(QHULL_LIBS qhull_r)
SET(VTK_LIBS
	vtkcgns-9.1
	vtkChartsCore-9.1
	vtkCommonColor-9.1
	vtkCommonComputationalGeometry-9.1
	vtkCommonCore-9.1
	vtkCommonDataModel-9.1
	vtkCommonExecutionModel-9.1
	vtkCommonMath-9.1
	vtkCommonMisc-9.1
	vtkCommonSystem-9.1
	vtkCommonTransforms-9.1
	vtkDICOMParser-9.1
	vtkDomainsChemistry-9.1
	vtkDomainsChemistryOpenGL2-9.1
	vtkdoubleconversion-9.1
	vtkexodusII-9.1
	vtkexpat-9.1
	vtkFiltersAMR-9.1
	vtkFiltersCore-9.1
	vtkFiltersExtraction-9.1
	vtkFiltersFlowPaths-9.1
	vtkFiltersGeneral-9.1
	vtkFiltersGeneric-9.1
	vtkFiltersGeometry-9.1
	vtkFiltersHybrid-9.1
	vtkFiltersHyperTree-9.1
	vtkFiltersImaging-9.1
	vtkFiltersModeling-9.1
	vtkFiltersParallel-9.1
	vtkFiltersParallelImaging-9.1
	vtkFiltersPoints-9.1
	vtkFiltersProgrammable-9.1
	vtkFiltersSelection-9.1
	vtkFiltersSMP-9.1
	vtkFiltersSources-9.1
	vtkFiltersStatistics-9.1
	vtkFiltersTexture-9.1
	vtkFiltersTopology-9.1
	vtkFiltersVerdict-9.1
	vtkfmt-9.1
	vtkfreetype-9.1
	vtkGeovisCore-9.1
	vtkgl2ps-9.1
	vtkglew-9.1
	vtkhdf5-9.1
	vtkhdf5_hl-9.1
	vtkImagingColor-9.1
	vtkImagingCore-9.1
	vtkImagingFourier-9.1
	vtkImagingGeneral-9.1
	vtkImagingHybrid-9.1
	vtkImagingMath-9.1
	vtkImagingMorphological-9.1
	vtkImagingSources-9.1
	vtkImagingStatistics-9.1
	vtkImagingStencil-9.1
	vtkInfovisCore-9.1
	vtkInfovisLayout-9.1
	vtkInteractionImage-9.1
	vtkInteractionStyle-9.1
	vtkInteractionWidgets-9.1
	vtkIOAMR-9.1
	vtkIOAsynchronous-9.1
	vtkIOCGNSReader-9.1
	vtkIOChemistry-9.1
	vtkIOCityGML-9.1
	vtkIOCONVERGECFD-9.1
	vtkIOCore-9.1
	vtkIOEnSight-9.1
	vtkIOExodus-9.1
	vtkIOExport-9.1
	vtkIOExportGL2PS-9.1
	vtkIOExportPDF-9.1
	vtkIOGeometry-9.1
	vtkIOHDF-9.1
	vtkIOImage-9.1
	vtkIOImport-9.1
	vtkIOInfovis-9.1
	vtkIOIOSS-9.1
	vtkIOLegacy-9.1
	vtkIOLSDyna-9.1
	vtkIOMINC-9.1
	vtkIOMotionFX-9.1
	vtkIOMovie-9.1
	vtkIONetCDF-9.1
	vtkIOOggTheora-9.1
	vtkIOParallel-9.1
	vtkIOParallelXML-9.1
	vtkIOPLY-9.1
	vtkIOSegY-9.1
	vtkIOSQL-9.1
	vtkioss-9.1
	vtkIOTecplotTable-9.1
	vtkIOVeraOut-9.1
	vtkIOVideo-9.1
	vtkIOXML-9.1
	vtkIOXMLParser-9.1
	vtkjpeg-9.1
	vtkjsoncpp-9.1
	vtkkissfft-9.1
	vtklibharu-9.1
	vtklibproj-9.1
	vtklibxml2-9.1
	vtkloguru-9.1
	vtklz4-9.1
	vtklzma-9.1
	vtkmetaio-9.1
	vtknetcdf-9.1
	vtkogg-9.1
	vtkParallelCore-9.1
	vtkParallelDIY-9.1
	vtkpng-9.1
	vtkpugixml-9.1
	vtkRenderingAnnotation-9.1
	vtkRenderingContext2D-9.1
	vtkRenderingContextOpenGL2-9.1
	vtkRenderingCore-9.1
	vtkRenderingFreeType-9.1
	vtkRenderingGL2PSOpenGL2-9.1
	vtkRenderingImage-9.1
	vtkRenderingLabel-9.1
	vtkRenderingLOD-9.1
	vtkRenderingOpenGL2-9.1
	vtkRenderingSceneGraph-9.1
	vtkRenderingUI-9.1
	vtkRenderingVolume-9.1
	vtkRenderingVolumeOpenGL2-9.1
	vtkRenderingVtkJS-9.1
	vtksqlite-9.1
	vtksys-9.1
	vtkTestingRendering-9.1
	vtktheora-9.1
	vtktiff-9.1
	vtkverdict-9.1
	vtkViewsContext2D-9.1
	vtkViewsCore-9.1
	vtkViewsInfovis-9.1
	vtkWrappingTools-9.1
	vtkzlib-9.1)
SET(LINK_LIBS ${BOOST_STATIC_LIBS} ${FLANN_LIBS} ${OPENNI2_LIBS} ${PCL_LIBS} ${QHULL_LIBS} ${VTK_LIBS})

aux_source_directory( ${PCL_Demo_ROOT}/src PCL_Demo_SRC_LIST )

include_directories(${INC_DIR})
link_directories(${LIB_DIR})

ADD_EXECUTABLE(hello_PCL "${PCL_Demo_ROOT}/unit_test/main.cpp" ${PCL_Demo_SRC_LIST})
TARGET_LINK_LIBRARIES(hello_PCL ${LINK_LIBS})


测试代码:

#include <iostream>
#include <vector>
#include <ctime>
#include <pcl/point_cloud.h>
#include <pcl/octree/octree.h>
#include <boost/thread/thread.hpp>
#include <pcl/visualization/pcl_visualizer.h>
using namespace std;

int main(int argc, char** argv)
{
	srand((unsigned int)time(NULL));
	pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);
	// 创建点云数据
	cloud->width = 1000;
	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.0f * rand() / (RAND_MAX + 1.0f);
		cloud->points[i].y = 1024.0f * rand() / (RAND_MAX + 1.0f);
		cloud->points[i].z = 1024.0f * rand() / (RAND_MAX + 1.0f);
	}

	pcl::octree::OctreePointCloudSearch<pcl::PointXYZ> octree(0.1);
	octree.setInputCloud(cloud);
	octree.addPointsFromInputCloud();
	pcl::PointXYZ searchPoint;
	searchPoint.x = 1024.0f * rand() / (RAND_MAX + 1.0f);
	searchPoint.y = 1024.0f * rand() / (RAND_MAX + 1.0f);
	searchPoint.z = 1024.0f * rand() / (RAND_MAX + 1.0f);

	//半径内近邻搜索
	vector<int>pointIdxRadiusSearch;
	vector<float>pointRadiusSquaredDistance;
	float radius = 256.0f * rand() / (RAND_MAX + 1.0f);
	cout << "Neighbors within radius search at (" << searchPoint.x
		<< " " << searchPoint.y
		<< " " << searchPoint.z
		<< ") with radius=" << radius << endl;
	if (octree.radiusSearch(searchPoint, radius, pointIdxRadiusSearch, pointRadiusSquaredDistance) > 0)
	{
		for (size_t i = 0; i < pointIdxRadiusSearch.size(); ++i)
			cout << "    " << cloud->points[pointIdxRadiusSearch[i]].x
			<< " " << cloud->points[pointIdxRadiusSearch[i]].y
			<< " " << cloud->points[pointIdxRadiusSearch[i]].z
			<< " (squared distance: " << pointRadiusSquaredDistance[i] << ")" << endl;
	}
	// 初始化点云可视化对象
	boost::shared_ptr<pcl::visualization::PCLVisualizer> viewer(new pcl::visualization::PCLVisualizer("显示点云"));
	viewer->setBackgroundColor(0, 0, 0);  //设置背景颜色为黑色
	// 对点云着色可视化 (red).
	pcl::visualization::PointCloudColorHandlerCustom<pcl::PointXYZ>target_color(cloud, 255, 0, 0);
	viewer->addPointCloud<pcl::PointXYZ>(cloud, target_color, "target cloud");
	viewer->setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 1, "target cloud");

	// 等待直到可视化窗口关闭
	while (!viewer->wasStopped())
	{
		viewer->spinOnce(100);
		boost::this_thread::sleep(boost::posix_time::microseconds(1000));
	}

	return (0);
}

测试结果:
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值