PCL学习二
安装PCLPCL点云库WindowsVS2022 安装AllInOne 一键包推荐不用源码编译⚠️ 重要提醒PCL 是 C 库和你刚才 C# Activiz 项目完全分开。PCL 新建一个C 空项目写代码编译成 dll再给 C# 调用不要把 PCL 直接装到 C# 项目里面。 版本选择PCL-1.15.1-AllInOne-msvc2022-win64.exe专门适配 VS202264 位AllInOne 包自带 Boost、Eigen、VTK、OpenNI2 全部依赖一键安装。1、下载安装包下载地址PCL 官方 github release Releases · PointCloudLibrary/pcl · GitHub 找到PCL-1.15.1-AllInOne-msvc2022-win64.exe下载。2、安装步骤右键管理员身份运行 exe安装选项勾选Add PCL to the system PATH for all users自动添加系统环境变量强烈建议勾选安装路径不要装 C 盘不要中文路径推荐D:\PCL 1.15.1组件全部默认勾选下一步安装中途会弹出 OpenNI2 安装OpenNI2 安装目录选择D:\PCL 1.15.1\3rdParty\OpenNI2统一放 PCL 目录下方便管理等待解压完成点 Finish 结束安装3、检查环境变量安装完成后WinR 输入sysdm.cpl→ 高级 → 环境变量 确认系统变量存在PCL_ROOT D:\PCL 1.15.1Path 里面自动添加了D:\PCL 1.15.1\binD:\PCL 1.15.1\3rdParty\VTK\binD:\PCL 1.15.1\3rdParty\Boost\lib如果 PATH 太长安装程序添加失败需要手动把上面几条路径加到系统 Path 里。✅安装完必须重启电脑环境变量才生效4、VS2022 C 项目配置新建 C 空项目注意这是C 项目用来写 PCL 算法最后编译成 dll给你的 C# 上位机调用。VS2022 新建【空项目 C】解决方案平台选择x64项目右键 → 属性① VC 目录包含目录$(PCL_ROOT)\include\pcl-1.15 $(PCL_ROOT)\3rdParty\Boost\include $(PCL_ROOT)\3rdParty\Eigen\include $(PCL_ROOT)\3rdParty\FLANN\include $(PCL_ROOT)\3rdParty\VTK\include\vtk-9.1注意实际安装版本目录和上方不同导致编译出错D:\PCL1.15.1\3rdParty\Boost\include\boost-1_87\保证下一个文件夹是boostboost文件夹下有assert.hpp同样Eigen下面目录要包含\Eigen\Core所以应该修改为D:\PCL1.15.1\3rdParty\Eigen3\include\eigen3\库目录$(PCL_ROOT)\lib $(PCL_ROOT)\3rdParty\Boost\lib $(PCL_ROOT)\3rdParty\VTK\lib② C/C → 预处理器 → 预处理器定义添加PCL_SILENCE_MALLOC_WARNING1EIGEN_MAX_ALIGN_BYTES32_CRT_SECURE_NO_WARNINGSBOOST_ALL_NO_LIB③ 链接器 → 输入 → 附加依赖项把 lib 目录下所有.lib写进去Debug 和 Release 区分也可以用属性表一键配置开启 AVX 指令集推荐正式项目右键项目 → 属性 → 配置属性 → C/C → 代码生成【增强指令集】改为/arch:AVX或者/arch:AVX2保存重新生成5、测试代码验证 PCL 是否安装成功#include iostream #include pcl/io/pcd_io.h #include pcl/point_types.h int main() { pcl::PointCloudpcl::PointXYZ cloud; cloud.width 5; cloud.height 1; cloud.points.resize(cloud.width * cloud.height); for (auto point : cloud) { point.x 1024 * rand() / (RAND_MAX 1.0f); point.y 1024 * rand() / (RAND_MAX 1.0f); point.z 1024 * rand() / (RAND_MAX 1.0f); } pcl::io::savePCDFileASCII(test.pcd, cloud); std::cout 生成点云文件成功 std::endl; return 0; }编译运行生成test.pcd代表 PCL 环境完全正常。⚠️ 重点避坑和你 C# Activiz 项目相关PCL 自带 VTK 和 Activiz 的 VTK 版本不一样PCL1.15 内置 VTK9.1你 C# Activiz5.8 是 VTK5.8。两套 VTK 不要混在一起C# 项目和 C PCL 项目是两个独立工程。你的流程C 项目PCL读取 PCD、滤波、处理点云 → 输出 XYZ 浮点数组编译成 dllC# 项目Activiz调用这个 C dll 拿到 float [] 点数组送到 RenderWindowControl 渲染显示平台统一全部 x64不能 AnyCPU测试成功