关于Winform+KitWare.VTK+PCL处理3D点云文件的编译环境
最近项目需求,在网上找了一个处理3D点云文件的源码,但是发现无法编译,研究了下原来是电脑环境问题,必须配置一个PCL库的环境才能使用,下面进入正题。
首先需要安装PCL环境,可以通过vcpkg安装(因为我没有成功,所以请自行查找),我是一直卡在装载pcl环节失败,网上搜了很多解决方法,包括重装VS英文语言包、关闭杀毒等等都没有解决。
后来我是直接安装PCL,手动配置环境的。参考引文:win10+vs2019+pcl1.11.0安装教程_pcl 11-CSDN博客
步骤具体如下:
第一步:从github下载最新发布版PCL,下图中PCL-1.13.1-AllInOne-msvc2022-win64.exe和pcl-1.13.1-pdb-msvc2022-win64.zip两个文件,网址:Releases · PointCloudLibrary/pcl (github.com)
注意需要和VS版本配套,我使用的是pcl1.13.1和VS2022。
GitHub打不开的时候,急用的话可以从下面的链接直接下载:
【免费】点云pcl库pcl-1.13.1版本资源-CSDN文库
第二步:安装下载好的PCL-1.13.1-AllInOne-msvc2022-win64.exe,安装路径我用了默认路径C:\Program Files\PCL 1.13.1
注意选择Add PCL to the system PATH for all users,使环境变量自动添加到系统中。
安装到最后会跳出OpenNI的安装提示,默认会直接安装到C盘,此时将路径选择PCL已有的安装目录下C:\Program Files\PCL 1.13.1\3rdParty\OpenNI2,
如果没有注意,安装到了默认路径,也可以在PCL的OpenNI2文件夹里找到安装包,卸载OpenNI后重新安装即可。
第三步:解压pcl-1.13.1-pdb-msvc2022-win64.zip,将文件夹里的内容复制到C:\Program Files\PCL 1.13.1\bin中。
第四步:配置环境变量,我的电脑-->属性-->高级系统设置-->高级-->环境变量-->系统变量-->Path
可以看到已经有两个路径已经添加,就是pcl安装的时候选自动添加的。下面我们需要手动添加一下第三个...\OpenNI2\Redist的路径。添加后重启电脑。
第五步:在项目中配置pcl
打开VS项目,编译环境改为Release,x64版本。
打开项目的属性管理器,视图-->其他窗口-->属性管理器
在Release|x64下面添加新项目属性表,命名为pcl(可自定义)
进入新加属性表的属性,在VC++目录中,添加包含目录和库目录。
包含目录中内容:
库目录中内容:
在C/C++-->预处理器-->预处理器定义,添加如下:
BOOST_USE_WINDOWS_H
NOMINMAX
_CRT_SECURE_NO_DEPRECATE
在C/C++-->所有选项-->SDL检查下,改为否
在链接器-->输入-->附加依赖项中,将路径C:\Program Files\PCL 1.13.1\lib和路径C:\Program Files\PCL 1.13.1\3rdParty\VTK\lib,这两个路径文件夹内的release版本文件添加到附加依赖项中。
请注意文件夹内会有两个版本的文件,一个是debug版本,一个是release版本,只需要release版本的文件。
(里面有很多文件,不可能一个个手动去加的,办法是导出整个文件内的文件名再通过奇偶行去区分,便捷方法怎么使用请参考上面的引文链接)
导出文件名命令:
dir /b *.lib*>list.txt
奇偶行辨别分别导出到txt:
string inputFile = @"C:\Users\...\Desktop\0.txt"; string oddLinesFile = @"C:\Users\...\Desktop\1.txt"; string evenLinesFile = @"C:\Users\...\Desktop\2.txt"; // 读取输入文件中的所有行 string[] lines = File.ReadAllLines(inputFile); // 创建奇数行和偶数行的文件流 using (StreamWriter oddWriter = new StreamWriter(oddLinesFile)) using (StreamWriter evenWriter = new StreamWriter(evenLinesFile)) { // 遍历所有行 for (int i = 0; i < lines.Length; i++) { // 奇数行写入奇数行文件 if (i % 2 == 0) { oddWriter.WriteLine(lines[i]); } // 偶数行写入偶数行文件 else { evenWriter.WriteLine(lines[i]); } } } Console.WriteLine("奇数行已保存到 " + oddLinesFile); Console.WriteLine("偶数行已保存到 " + evenLinesFile);
最后还要修改项目属性-->C/C++-->所有选项-->SDL检查-->改为否。注意左上角是项目的属性,不是刚才属性表的属性。
到此,PCL环境配置完毕,可以编译使用PCL库的VS项目了