关于Winform+KitWare.VTK+PCL处理3D点云文件的编译环境

发布时间 2023-12-06 15:23:33作者: 芈璐

最近项目需求,在网上找了一个处理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项目了