【PCL】PCL1.15.0 环境安装配置流程记录
Windows11 + vs2022 + pcl1.15.0
通过网盘分享的文件:PCL1.15.0配置相关文件
链接: https://pan.baidu.com/s/1mWn0UK8RiGFBdS1A4pZADg 提取码: qmsq
希望可以帮助到更多的人~
文章目录
1. Visual Studio 安装
下载链接:https://visualstudio.microsoft.com/zh-hans/downloads/
正常安装即可,安装 vs2022 过程中记得勾选使用C++的桌面开发和WinUi应用程序开发
2. PCL 安装
PCL相关安装包下载路径:https://github.com/PointCloudLibrary/pcl/releases,最新版1.15.0
2.1. PCL-1.15.0-AlllnOne 安装注意事项
- 安装路径自定义
- 建议勾选添加环境变量
- 安装组件选择 PCL 和 3rd Party
2.2. PCL-1.15.0-pdb-msvc2022 安装注意事项
下载 —> 解压 —> 移至 PCL1.15.0/bin 目录中
3. OpenNI2 安装
进入 E:\PCL\PCL 1.15.0\3rdParty\OpenNI2 目录中,执行如下文件:
如果已经安装过请点击 remove 移除后再下载
4. 环境变量配置
4.1. PCL 环境变量
系统环境变量 path 下添加,根据PCL安装目录修改:
E:\PCL\PCL 1.15.0\bin
E:\PCL\PCL 1.15.0\3rdParty\VTK\bin
E:\PCL\PCL 1.15.0\3rdParty\FLANN\bin
E:\PCL\PCL 1.15.0\3rdParty\Qhull\bin
E:\PCL\PCL 1.15.0\3rdParty\OpenNI2\Tools
E:\PCL\PCL 1.15.0\3rdParty\OpenNI2\Redist
E:\PCL\PCL 1.15.0\3rdParty\OpenNI2\Include
E:\PCL\PCL 1.15.0\3rdParty\OpenNI2\Lib
5. PCL 项目配置
5.1. 新建项目
5.2. ReleaseX64 属性配置
第一步:点击属性管理视图,若无属性管理视图,在cs左上方视图中打开
第二步:添加Release X64新项目属性表
第三步:SDL检查设置为否
第四步:配置通用属性 VC++目录 -> 包含目录
点击编辑后找到一下对应目录,逐个添加进去
E:\PCL\PCL 1.15.0\include\pcl-1.15
E:\PCL\PCL 1.15.0\3rdParty\Boost\include\boost-1_87
E:\PCL\PCL 1.15.0\3rdParty\Eigen3\include\eigen3
E:\PCL\PCL 1.15.0\3rdParty\Eigen3\include\eigen3\Eigen
E:\PCL\PCL 1.15.0\3rdParty\Eigen3\include\eigen3\unsupported
E:\PCL\PCL 1.15.0\3rdParty\Eigen3\include\eigen3\unsupported\Eigen
E:\PCL\PCL 1.15.0\3rdParty\FLANN\include
E:\PCL\PCL 1.15.0\3rdParty\FLANN\include\flann
E:\PCL\PCL 1.15.0\3rdParty\OpenNI2\Include
E:\PCL\PCL 1.15.0\3rdParty\Qhull\include
E:\PCL\PCL 1.15.0\3rdParty\Qhull\include\libqhull
E:\PCL\PCL 1.15.0\3rdParty\Qhull\include\libqhull_r
E:\PCL\PCL 1.15.0\3rdParty\Qhull\include\libqhullcpp
E:\PCL\PCL 1.15.0\3rdParty\VTK\include
E:\PCL\PCL 1.15.0\3rdParty\VTK\include\vtk-9.4
第五步:配置通用属性 VC++目录 -> 库目录
同样,点击编辑后找到一下对应目录,逐个添加进去
E:\PCL\PCL 1.15.0\lib
E:\PCL\PCL 1.15.0\3rdParty\Boost\lib
E:\PCL\PCL 1.15.0\3rdParty\FLANN\lib
E:\PCL\PCL 1.15.0\3rdParty\OpenNI2\Lib
E:\PCL\PCL 1.15.0\3rdParty\Qhull\lib
E:\PCL\PCL 1.15.0\3rdParty\VTK\lib
第六步:其他配置
- 符合模式:
-
预处理器定义:
BOOST_USE_WINDOWS_H NOMINMAX _CRT_SECURE_NO_DEPRECATE
-
增强指令集
第七步:连接器 -> 输入 -> 附加依赖项
此处内容参考百度网盘链接中对应文件的内容,以下两个连接器文本中的内容均需添加。此处需注意各版本包含的内容不同,对于release版本可直接通过以下指令在对应的文件夹中生成所需的内容:
cd \e E:\PCL\PCL1.15.0\lib 进入到对应lib目录下
dir/b *d.lib >release.txt release使用的d.lib后缀名字写到release.txt中
同样的再进入 E:\PCL\PCL 1.15.0\3rdParty\VTK\lib 目录下执行第二行命令,最后将两个生成的文本中的内容都添加到附加依赖项中即可
第八步:保存属性
5.3. DebugX64 属性配置
与5.2. ReleaseX64 属性配置步骤一样,在Debug | x64处新添加属性,然后进行同样的配置。
不同之处在于第七步 连接器 -> 输入 -> 附加依赖项,此处参考百度网盘中的文件,找出于release版本不同的地方删掉即可(注意不同版本整体内容可能不同)
5.4. 项目属性配置
第一步:进入项目属性配置页
第二步:进入编辑
第三步:添加内容
PATH=$(PCL_ROOT)\bin;$(PCL_ROOT)\3rdParty\FLANN\bin;$(PCL_ROOT)\3rdParty\VTK\bin;$(PCL_ROOT)\3rdParty\Qhull\bin;C:\Program Files\OpenNI2\Tools;$(PATH)
6. 测试
第一步:在源文件中添加项
第二步:添加内容
#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);
}
出现以下界面即代表配置成功
7. 遇见的问题
PCL\ip\low_level_io.h(x.x):error …: “_read”: 不是“global namespace” 的成员
“_read”: 找不到标识符
类似的解决方案:
在头文件中添加,添加在#include <pcl/io/pcd_io.h>前面
#include <corecrt_io.h> // 在前面添加
#include <pcl/io/pcd_io.h>
然后在文件系统里搜索corecrt_io.h,将其目录添加到项目包含目录中
8. 参考内容
win+vs2022+pcl 1.13.0 all in one 安装