为了和我的VS的版本VS 2017对应,PCL下载的也是msvc_2017,PCL msvc2017最新的则是1.901版本,我们就以PCL 1.9.1为例了。(如果你的vs是2019和2022,一定要注意PCL的版本)。
一、下载PCL
我们打开PCL的github下载地址(点击下载),下载我们需要的版本,如下图:
我们统一也下载64位的版本,下载PCL-1.9.1-AllInOne-msvc2017-win64.exe和pcl-1.9.1-pdb-msvc2017-win64.zip
二、PCL的安装
点击PCL-1.9.1-AllInOne-msvc2017-win64.exe,通过管理员权限打开:
点击“下一步”
点击“我接受”.
选择第二个:Add PCL to the system PATH for all users,然后,点击 下一步。
弹出安装位置,注意此处PCL后面有个空格
我自己选择了自定义的安装路径
安装注意:不要带中文和空格
点击下一步
勾选所有的,然后点击 安装
正在进行安装
安装过程中会跳出如下OpenNI安装界面
选择路径/3rdParty/OpenNI2/安装(为了之后方便配置环境)。
OpenNI安装完成。
PCL安装完成。
安装完成后,我们在安装文件夹下可以看到安装的内容:
安装完成之后,我们打开环境变量,可以看到环境变量变化如下:
安装完成后,解压下载的pcl-1.11.0-pdb-msvc2017-win64.zip文件。
把解压的内容拷贝到pcl安装路径下的bin文件夹内:
三、VTK替换
在我们安装文件夹内,可以看到有VTK的存在
但是PCL 安装目录下的 VTK 并不完整,其中就少了与 Qt 相关的模块,而这些模块是 CloudViewer 编译运行所需要的(如
QVTKWidget
)。所以我们需要手动编译 VTK,并替换 PCL/3rdParty
下的 VTK。
我们把把编译好的VTK拷贝替换PCL安装的这个。
VTK的编译可以参考:VTK8.2.0编译(Qt 5.14.2+VS2017)
四、设置环境变量
先在新建一个变量PCL_ROOT,变量值为我们pcl的安装目录:
然后双击Path中增加环境变量:
然后重启电脑。
五、使用Qt Creator创建点云程序
1、使用Qt 创建一个MSVC 64位的程序,命名pcltest001,然后在pro文件中配置pcl相关的内容:
INCLUDEPATH += D:/Soft_Install/PCL1.9.1/3rdParty/Boost/include/boost-1_68 \
INCLUDEPATH += D:/Soft_Install/PCL1.9.1/3rdParty/Eigen/eigen3 \
INCLUDEPATH += D:/Soft_Install/PCL1.9.1/3rdParty/FLANN/include/flann \
INCLUDEPATH += D:/Soft_Install/PCL1.9.1/3rdParty/OpenNI2/Include \
INCLUDEPATH += D:/Soft_Install/PCL1.9.1/3rdParty/Qhull/include \
INCLUDEPATH += D:/Soft_Install/PCL1.9.1/3rdParty/VTK/include/vtk-8.2 \
INCLUDEPATH += D:/Soft_Install/PCL1.9.1/include/pcl-1.9/pcl \
INCLUDEPATH += D:/Soft_Install/PCL1.9.1/include/pcl-1.9 \
LIBS += -LD:/Soft_Install/PCL1.9.1/lib \
-lpcl_common_release \
-lpcl_features_release \
-lpcl_filters_release \
-lpcl_io_release \
-lpcl_io_ply_release \
-lpcl_kdtree_release \
-lpcl_keypoints_release \
-lpcl_ml_release \
-lpcl_octree_release \
-lpcl_outofcore_release \
-lpcl_people_release \
-lpcl_recognition_release \
-lpcl_registration_release \
-lpcl_sample_consensus_release \
-lpcl_search_release \
-lpcl_segmentation_release \
-lpcl_stereo_release \
-lpcl_surface_release \
-lpcl_tracking_release \
-lpcl_visualization_release
LIBS += -LD:/Soft_Install/PCL1.9.1/3rdParty/Boost/lib/ \
-llibboost_atomic-vc141-mt-x64-1_68\
-llibboost_bzip2-vc141-mt-x64-1_68\
-llibboost_chrono-vc141-mt-x64-1_68\
-llibboost_container-vc141-mt-x64-1_68\
-llibboost_context-vc141-mt-x64-1_68\
-llibboost_contract-vc141-mt-x64-1_68\
-llibboost_coroutine-vc141-mt-x64-1_68\
-llibboost_date_time-vc141-mt-x64-1_68\
-llibboost_exception-vc141-mt-x64-1_68\
-llibboost_fiber-vc141-mt-x64-1_68\
-llibboost_filesystem-vc141-mt-x64-1_68\
-llibboost_graph-vc141-mt-x64-1_68\
-llibboost_graph_parallel-vc141-mt-x64-1_68\
-llibboost_iostreams-vc141-mt-x64-1_68\
-llibboost_locale-vc141-mt-x64-1_68\
-llibboost_log-vc141-mt-x64-1_68\
-llibboost_log_setup-vc141-mt-x64-1_68\
-llibboost_math_c99-vc141-mt-x64-1_68\
-llibboost_math_c99f-vc141-mt-x64-1_68\
-llibboost_math_c99l-vc141-mt-x64-1_68\
-llibboost_math_tr1-vc141-mt-x64-1_68\
-llibboost_math_tr1f-vc141-mt-x64-1_68\
-llibboost_math_tr1l-vc141-mt-x64-1_68\
-llibboost_mpi-vc141-mt-x64-1_68\
-llibboost_numpy27-vc141-mt-x64-1_68\
-llibboost_numpy37-vc141-mt-x64-1_68\
-llibboost_prg_exec_monitor-vc141-mt-x64-1_68\
-llibboost_program_options-vc141-mt-x64-1_68\
-llibboost_python27-vc141-mt-x64-1_68\
-llibboost_python37-vc141-mt-x64-1_68\
-llibboost_random-vc141-mt-x64-1_68\
-llibboost_regex-vc141-mt-x64-1_68\
-llibboost_serialization-vc141-mt-x64-1_68\
-llibboost_signals-vc141-mt-x64-1_68\
-llibboost_stacktrace_noop-vc141-mt-x64-1_68\
-llibboost_stacktrace_windbg-vc141-mt-x64-1_68\
-llibboost_stacktrace_windbg_cached-vc141-mt-x64-1_68\
-llibboost_system-vc141-mt-x64-1_68\
-llibboost_test_exec_monitor-vc141-mt-x64-1_68\
-llibboost_thread-vc141-mt-x64-1_68\
-llibboost_timer-vc141-mt-x64-1_68\
-llibboost_type_erasure-vc141-mt-x64-1_68\
-llibboost_unit_test_framework-vc141-mt-x64-1_68\
-llibboost_wave-vc141-mt-x64-1_68\
-llibboost_wserialization-vc141-mt-x64-1_68\
-llibboost_zlib-vc141-mt-x64-1_68
LIBS += -LD:/Soft_Install/PCL1.9.1/3rdParty/FLANN/lib\
-lflann\
-lflann_cpp\
-lflann_cpp_s\
-lflann_s\
LIBS += -LD:/Soft_Install/PCL1.9.1/3rdParty/OpenNI2/Lib\
-lOpenNI2
LIBS += -LD:/Soft_Install/PCL1.9.1/3rdParty/Qhull/lib\
-lqhull\
-lqhullcpp\
-lqhullstatic\
-lqhullstatic_r\
-lqhull_p\
-lqhull_r
LIBS += -LD:/Soft_Install/PCL1.9.1/3rdParty/VTK/lib \
-lvtkChartsCore-8.2 \
-lvtkCommonColor-8.2 \
-lvtkCommonComputationalGeometry-8.2 \
-lvtkCommonCore-8.2 \
-lvtkCommonDataModel-8.2 \
-lvtkCommonExecutionModel-8.2 \
-lvtkCommonMath-8.2 \
-lvtkCommonMisc-8.2 \
-lvtkCommonSystem-8.2 \
-lvtkCommonTransforms-8.2 \
-lvtkDICOMParser-8.2 \
-lvtkDomainsChemistry-8.2 \
-lvtkDomainsChemistryOpenGL2-8.2 \
-lvtkdoubleconversion-8.2 \
-lvtkexodusII-8.2 \
-lvtkexpat-8.2 \
-lvtkFiltersAMR-8.2 \
-lvtkFiltersCore-8.2 \
-lvtkFiltersExtraction-8.2 \
-lvtkFiltersFlowPaths-8.2 \
-lvtkFiltersGeneral-8.2 \
-lvtkFiltersGeneric-8.2 \
-lvtkFiltersGeometry-8.2 \
-lvtkFiltersHybrid-8.2 \
-lvtkFiltersHyperTree-8.2 \
-lvtkFiltersImaging-8.2 \
-lvtkFiltersModeling-8.2 \
-lvtkFiltersParallel-8.2 \
-lvtkFiltersParallelImaging-8.2 \
-lvtkFiltersPoints-8.2 \
-lvtkFiltersProgrammable-8.2 \
-lvtkFiltersSelection-8.2 \
-lvtkFiltersSMP-8.2 \
-lvtkFiltersSources-8.2 \
-lvtkFiltersStatistics-8.2 \
-lvtkFiltersTexture-8.2 \
-lvtkFiltersTopology-8.2 \
-lvtkFiltersVerdict-8.2 \
-lvtkfreetype-8.2 \
-lvtkGeovisCore-8.2 \
-lvtkgl2ps-8.2 \
-lvtkglew-8.2 \
-lvtkGUISupportQt-8.2 \
-lvtkGUISupportQtOpenGL-8.2 \
-lvtkGUISupportQtSQL-8.2 \
-lvtkhdf5-8.2 \
-lvtkhdf5_hl-8.2 \
-lvtkImagingColor-8.2 \
-lvtkImagingCore-8.2 \
-lvtkImagingFourier-8.2 \
-lvtkImagingGeneral-8.2 \
-lvtkImagingHybrid-8.2 \
-lvtkImagingMath-8.2 \
-lvtkImagingMorphological-8.2 \
-lvtkImagingSources-8.2 \
-lvtkImagingStatistics-8.2 \
-lvtkImagingStencil-8.2 \
-lvtkInfovisCore-8.2 \
-lvtkInfovisLayout-8.2 \
-lvtkInteractionImage-8.2 \
-lvtkInteractionStyle-8.2 \
-lvtkInteractionWidgets-8.2 \
-lvtkIOAMR-8.2 \
-lvtkIOAsynchronous-8.2 \
-lvtkIOCityGML-8.2 \
-lvtkIOCore-8.2 \
-lvtkIOEnSight-8.2 \
-lvtkIOExodus-8.2 \
-lvtkIOExport-8.2 \
-lvtkIOExportOpenGL2-8.2 \
-lvtkIOExportPDF-8.2 \
-lvtkIOGeometry-8.2 \
-lvtkIOImage-8.2 \
-lvtkIOImport-8.2 \
-lvtkIOInfovis-8.2 \
-lvtkIOLegacy-8.2 \
-lvtkIOLSDyna-8.2 \
-lvtkIOMINC-8.2 \
-lvtkIOMovie-8.2 \
-lvtkIONetCDF-8.2 \
-lvtkIOParallel-8.2 \
-lvtkIOParallelXML-8.2 \
-lvtkIOPLY-8.2 \
-lvtkIOSegY-8.2 \
-lvtkIOSQL-8.2 \
-lvtkIOTecplotTable-8.2 \
-lvtkIOVeraOut-8.2 \
-lvtkIOVideo-8.2 \
-lvtkIOXML-8.2 \
-lvtkIOXMLParser-8.2 \
-lvtkjpeg-8.2 \
-lvtkjsoncpp-8.2 \
-lvtklibharu-8.2 \
-lvtklibxml2-8.2 \
-lvtkLocalExample-8.2 \
-lvtklz4-8.2 \
-lvtklzma-8.2 \
-lvtkmetaio-8.2 \
-lvtkNetCDF-8.2 \
-lvtkogg-8.2 \
-lvtkParallelCore-8.2 \
-lvtkpng-8.2 \
-lvtkproj-8.2 \
-lvtkpugixml-8.2 \
-lvtkRenderingAnnotation-8.2 \
-lvtkRenderingContext2D-8.2 \
-lvtkRenderingContextOpenGL2-8.2 \
-lvtkRenderingCore-8.2 \
-lvtkRenderingFreeType-8.2 \
-lvtkRenderingGL2PSOpenGL2-8.2 \
-lvtkRenderingImage-8.2 \
-lvtkRenderingLabel-8.2 \
-lvtkRenderingLOD-8.2 \
-lvtkRenderingOpenGL2-8.2 \
-lvtkRenderingQt-8.2 \
-lvtkRenderingVolume-8.2 \
-lvtkRenderingVolumeOpenGL2-8.2 \
-lvtksqlite-8.2 \
-lvtksys-8.2 \
-lvtktheora-8.2 \
-lvtktiff-8.2 \
-lvtkverdict-8.2 \
-lvtkViewsContext2D-8.2 \
-lvtkViewsCore-8.2 \
-lvtkViewsInfovis-8.2 \
-lvtkViewsQt-8.2 \
-lvtkzlib-8.2
main函数中输入下面的code:
#include "mainwindow.h"
#include <QApplication>
#include <iostream> //标准输入输出流
#include<pcl/io/io.h>
#include<pcl/io/pcd_io.h>
#include<pcl/io/ply_io.h>
#include <pcl/point_types.h> //PCL对各种格式的点的支持头文件
#include <pcl/visualization/cloud_viewer.h>//点云查看窗口头文件
#include <pcl/point_cloud.h>
#include <QDebug>
#include <QDir>
typedef pcl::PointXYZ PointT;
using namespace std;
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
// MainWindow w;
// w.show();
std::cout<<"start"<<std::endl;
pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);
QString file = "E:/Project_Data/PCL_Data/rabbit.pcd";
file = "E:/My_Soft/PCL/PCL_1.9.1/rabbit.pcd";
// 读取点云,失败返回-1
if (pcl::io::loadPCDFile<PointT>(file.toStdString(), *cloud) == -1)
{
PCL_ERROR("couldn't read file\n");
std::cout<<"error"<<std::endl;
return (-1);
}
std::cout << cloud->points.size() << std::endl;
// 点云可视化
pcl::visualization::CloudViewer viewer("Cloud Viewer");
viewer.showCloud(cloud);
// 循环判断是否退出
while (!viewer.wasStopped()) {
// 后续也可以在这里对点云做很多处理
}
std::cout<<"end"<<std::endl;
return a.exec();
}
报错的处理:
D:\Soft_Install\PCL1.9.1\include\pcl-1.9\pcl\visualization\impl\pcl_visualizer.hpp:1545: error: C2039: “ImmediateModeRenderingOff”: 不是“vtkMapper”的成员
重新编译运行:
我把rabbit文件,放到了百度云盘中,大家可以下载
链接:https://pan.baidu.com/s/11U9jmCkaSShy3ZpvYWAN3g
提取码:mvov
但是,美中不足的是会弹出Generic Waning框:
我尝试了网络上网友提供的很多方法,也无法把这个警告框去除掉。中间我也重新使用VTK8.2.0替换了,也不行。VTK8.1.0我也重新编译了,还是解决不了。
所以,我就重新安装了PCL1.8.1版本。
不知道你安装这个1.9.1会不会也会出现,欢迎你留言我们交流。
文章未经授权,禁止转载!