预防针:请严格跟着步骤走,这是本人用三天时间蹚出来的坑
一:下载
- PCL下载地址:https://github.com/PointCloudLibrary/pcl/releases 下载如图中的1、2两个文件
二:安装
- 打开下载的第一文件(安装包),进行安装
- 解压下载的第二个文件,将解压包里的pdb文件复制到第一步安装路径下的:bin目录下
- 打开安装路径下的文件夹:3rdParty\OpenNI2,点击可执行文件:OpenNI-Windows-x64-2.2.msi,进行安装
三:配置全局变量
- 打开全局变量设置
- 将以下几个路径添加到全局变量中
- %PCL_ROOT%\3rdParty\FLANN\bin
- %PCL_ROOT%\3rdPartyQhull\bin
- %PCL_ROOT%\3rdParty\VTK\bin
- %PCL_ROOT%\bin
- %OPENNI2_REDIST64%
- %OPENNI2_LIB64%
四:创建测试案例
- 创建测试项目
- pro文件编写
-
#高能警告:如果你的安装路径存在空格的请用:$$quote()函数将路径包起来,例如: #$$quote('H:/PCL1.11.1/lib') # #将库的路径改成自己安装库的路径 allLibFiles += \ $$quote('H:/PCL1.11.1/lib') \ 'H:/PCL1.11.1/3rdParty/VTK/lib' \ 'H:/PCL1.11.1/3rdParty/Qhull/lib' \ 'H:/PCL1.11.1/3rdParty/FLANN/lib' \ 'H:/PCL1.11.1/3rdParty/Boost/lib_runTimelinkShared/lib' \ $$quote('D:/windowSorftDefaultPath/Program Files/OpenNI2/Lib') \ for(var, allLibFiles) { myLibs += $$files($$join(var, , , '/*.lib'), true) for(oneLib, myLibs){ p_name = $$dirname(oneLib) e_name = $$basename(oneLib) e_name = $$replace(e_name, '\.lib',) LIBS += -L$$p_name -l$$e_name #message(-L$$p_name -l$$e_name) } } LIBS = $$unique(LIBS) #将以下的路径改成自己的路径 INCLUDEPATH += $$quote('D:/windowSorftDefaultPath/Program Files/OpenNI2/Include') #注意上面这个,这是OpenNI2安装路径,不知道在哪,就去系统盘下的windowSorftDefaultPath/Program #Files去找 INCLUDEPATH += 'H:/PCL1.11.1/3rdParty/Boost/lib_runTimelinkShared/include/boost-1_74' INCLUDEPATH += 'H:/PCL1.11.1/3rdParty/Eigen/eigen3' INCLUDEPATH += 'H:/PCL1.11.1/3rdParty/FLANN/include' INCLUDEPATH += 'H:/PCL1.11.1/3rdParty/Qhull/include' INCLUDEPATH += $$quote('H:/PCL1.11.1/3rdParty/VTK/include/vtk-8.2') INCLUDEPATH += 'H:/PCL1.11.1/include/pcl-1.11' DEPENDPATH += 'H:/PCL1.11.1/include/pcl-1.11'
-
- 在main函数中写入测试代码
-
#include <QApplication> #include "pcl/io/pcd_io.h" #include "pcl/point_types.h" #include "pcl/io/io.h" #include "pcl/io/file_io.h" #include <pcl/io/pcd_io.h> #include <pcl/io/obj_io.h> #include <pcl/PolygonMesh.h> #include <pcl/point_cloud.h> #include <boost/thread/thread.hpp> #include <pcl/visualization/cloud_viewer.h> #include <QDebug> #include <pcl/io/vtk_lib_io.h> #include "pcl/visualization/pcl_visualizer.h" #include "vtkAutoInit.h" using namespace pcl; int main(int argc, char *argv[]) { std::string fileName = "F:/qttest/1.obj"; //这里这个要改成你要显示的OBJ文件 pcl::PolygonMesh meshData;//读取原始数据 pcl::io::loadPolygonFile(fileName, meshData); pcl::PointCloud<pcl::PointXYZ>::Ptr cloud; cloud.reset(new pcl::PointCloud<pcl::PointXYZ>); pcl::fromPCLPointCloud2(meshData.cloud, *cloud);//将obj数据转换为点云数据 // 显示结果图 boost::shared_ptr<pcl::visualization::PCLVisualizer> viewer (new pcl::visualization::PCLVisualizer ("3D Viewer")); viewer->setBackgroundColor (0, 0, 0); //设置背景 viewer->addCoordinateSystem (15.0); //设置坐标系 viewer->initCameraParameters (); viewer->addPointCloud(cloud, "show"); while (!viewer->wasStopped()) { viewer->spinOnce (100); boost::this_thread::sleep (boost::posix_time::microseconds (100000)); } return 0; }
-
高能:
- 如果你编译通过、运行失败,请按照这个方法来
- 检查main函数中,指定的obj文件是否存在,或文件路径的 / 分隔符是否正确
- 请到PCL、VTK、boost等(凡是依赖都要)的动态库复制到可执行文件夹下面
备注:
- pcl1.11.1采用的是msvc2019,如果你想用msvc2017/2015,那么你就需要去编译替换依赖库:boost,编译方式在这:https://blog.csdn.net/JimBraddock/article/details/118033113
- 我在pcl里的vtk包中没有发现可以直接用于qt嵌入vtk的窗口插件,所以如何编译vtk,将vtk直接嵌入到qt窗口,请移步:https://blog.csdn.net/JimBraddock/article/details/118032361