天天看点

PCL环境配置--win10+VS2019+PCL1.11.1

PCL有两种建立工程的方法,一种以cmakelist.txt文件生成相对应的工程(例如VS2019),还有一种就是纯粹的建立包含PCL环境库的工程进行开发。本文主要介绍怎么从0开始建立PCL工程,方便后面配合CV和QT进行开发。

首先得先下载两个文件PCL-1.11.1-AllInOne-msvc2019-win64.exe和pcl-1.11.1-pdb-msvc2019-win64.zip网址在https://github.com/PointCloudLibrary/pcl/releases,github下载较慢,可以在我上传的资源里下载。

https://download.csdn.net/download/qq_36620335/21366764?spm=1001.2014.3001.5503或者

https://market.m.taobao.com/app/idleFish-F2e/widle-taobao-rax/page-detail?wh_weex=true&wx_navbar_transparent=true&id=653290469968&ut_sk=1.X0BuTlqcjoMDADDxU9Xd3zC8_21407387_1629423625726.copy.detail.653290469968.3313369254&forceFlush=1

下载完成后开始安装(最好下载64位的),

双击PCL-1.8.1-AllInOne-msvc2017-win32.exe  一路next到如下界面,直接点击下一步,这一步我们不添加环境变量,到完成安装后我们自己手动添加。

PCL环境配置--win10+VS2019+PCL1.11.1

到如下界面选择添加路径,最好安装到D盘。

PCL环境配置--win10+VS2019+PCL1.11.1

选中全部的第三方库。

PCL环境配置--win10+VS2019+PCL1.11.1

将OpenNI2安装到你pcl安装目录下的3rdParty\OpenNI2下,这里一定要改一下,有些人这一步没有做好后面编译的时候会发现OPenNI2的库一直在报错,就是因为这个库安装了但是环境变量没有设置好,安稳一点直接将其塞到该目录下。

当然如果你没有这一步或者已经出错了不要慌,在3rdParty\OpenNI2有个OpenNI-Windows-x64-2.2.msi文件,双击一样可以安装或者卸载重装。到这一步PCL-1.8.1-AllInOne-msvc2017-win32.exe已经安装完毕。

PCL环境配置--win10+VS2019+PCL1.11.1

解压pcl-1.11.1-pdb-msvc2019-win64.zip

PCL环境配置--win10+VS2019+PCL1.11.1

复制这些文件到你PCL安装路径下的bin文件夹下。

PCL环境配置--win10+VS2019+PCL1.11.1

至此软件已经全部安装完毕了。接下来就是环境配置的问题了。

首先先右击我的电脑->属性->高级系统设置->高级->环境变量。

PCL环境配置--win10+VS2019+PCL1.11.1

双击Path

PCL环境配置--win10+VS2019+PCL1.11.1

根据自己的版本添加相应的目录,千万别弄错了。

环境变量

D:\PCL\PCL 1.11.1\bin

D:\PCL\PCL 1.11.1\3rdParty\FLANN\bin

D:\PCL\PCL 1.11.1\3rdParty\Qhull\bin

D:\PCL\PCL 1.11.1\3rdParty\OpenNI2\Tools

D:\PCL\PCL 1.11.1\3rdParty\VTK\bin

PCL环境配置--win10+VS2019+PCL1.11.1

打开VS,创建一个C++工程,能打印helloworld的那种,打开 “属性管理器”窗口,在Debug X64和Release添加两个属性表。

PCL环境配置--win10+VS2019+PCL1.11.1

分别双击两个属性表按图示所示的区域填充具体的路径

PCL环境配置--win10+VS2019+PCL1.11.1

一定要根据自己的实际情况去设置

VC C/C++目录 包含目录 

D:\PCL\PCL 1.11.1\include\pcl-1.11

D:\PCL\PCL 1.11.1\3rdParty\VTK\include\vtk-8.2

D:\PCL\PCL 1.11.1\3rdParty\Qhull\include

D:\PCL\PCL 1.11.1\3rdParty\OpenNI2\Include

D:\PCL\PCL 1.11.1\3rdParty\FLANN\include

D:\PCL\PCL 1.11.1\3rdParty\Eigen\eigen3

D:\PCL\PCL 1.11.1\3rdParty\Boost\include\boost-1_74

尤其这两个要注意

PCL环境配置--win10+VS2019+PCL1.11.1

VC C/C++目录 库目录

D:\PCL\PCL 1.11.1\lib

D:\PCL\PCL 1.11.1\3rdParty\VTK\lib

D:\PCL\PCL 1.11.1\3rdParty\Qhull\lib

D:\PCL\PCL 1.11.1\3rdParty\OpenNI2\lib

D:\PCL\PCL 1.11.1\3rdParty\FLANN\lib

D:\PCL\PCL 1.11.1\3rdParty\Boost\lib

PCL环境配置--win10+VS2019+PCL1.11.1

C/C++->预处理器->预处理器定义

BOOST_USE_WINDOWS_H

NOMINMAX

_CRT_SECURE_NO_DEPRECATE

PCL环境配置--win10+VS2019+PCL1.11.1

 注意:到这里为止Debug和Release操作完全一样。

将pcl和vtk的lib库放入 链接器-输入-附加依赖项 中。

vtk结尾带-gd的为debug模式,不带的为release模式。pcl末尾带-debug的为debug模式(有的可能直接带-d),不带-debug(或d)为release模式。

一定注意是换行输入,或者中间加上;断开(直接复制过去应该就是换行输入,还是检查一下吧)。

转到链接器->输入栏,这里需要分别就Debug和Release两个输入不同的内容,先不要着急去复制,往下看。

PCL环境配置--win10+VS2019+PCL1.11.1

打开PCL 1.11.0\3rdParty\VTK\lib目录,在这里输入cmd进入命令行,执行dir /b *.lib *>0.txt,会在该目录下产生0.txt。

PCL环境配置--win10+VS2019+PCL1.11.1
PCL环境配置--win10+VS2019+PCL1.11.1
PCL环境配置--win10+VS2019+PCL1.11.1

 对PCL 1.11.0\lib目录进行一样的操作。

PCL环境配置--win10+VS2019+PCL1.11.1
PCL环境配置--win10+VS2019+PCL1.11.1
PCL环境配置--win10+VS2019+PCL1.11.1

或者

//win+r调出“运行”窗口并输出cmd

//(填自己的路径)

cd /d D:\programming\PCL 1.11.0\3rdParty\VTK\lib

dir /b *.lib *>0.txt

//win+r调出“运行”窗口并输出cmd

//(填自己的路径)

cd /d D:\programming\PCL 1.11.0\lib

dir /b *.lib *>0.txt

注意,两个依赖项还杂合在一起,直接复制的话太麻烦了,所以仍然是先别急继续往下看。

参考 VISUAL STUDIO 2019配置PCL1.9.0并测试这篇文章里的内容,找到了快速提取的方法。

建立一个C++工程将下面的代码添加到工程,将0.txt复制到代码的根目录下,这个0.txt中会把0.txt和一个pkgconfig文件夹也写进去,复制之前,应该把这两个删掉,否则可能会出现意外情况,总之没有.lib为后缀的都删掉,运行如下代码。

PCL环境配置--win10+VS2019+PCL1.11.1
#include <iostream>
#include <string>
#include <fstream> 
#include <iostream>
using namespace std;

int main()
{
	ifstream txtfile;//打开读取的文件
	ofstream txt01;//保存的文件
	ofstream txt02;//保存的文件
	string temp;
	int index = 0;//用于判断奇偶

	txtfile.open("0.txt", ios::in);

	while (!txtfile.eof())            // 若未到文件结束一直循环
	{

		getline(txtfile, temp);//一行一行读取
		if (index % 2 == 0)//判断除以2的余数,即为奇偶的判断
		{
			txt01.open("1.txt", ios::app);
			txt01 << temp;
			txt01 << endl;
			txt01.close();
		}
		else
		{
			txt02.open("2.txt", ios::app);
			txt02 << temp;
			txt02 << endl;
			txt02.close();
		}
		index++;
	}
	txtfile.close();   //关闭文件
	txtfile.close();
	txt01.close();
	txt02.close();

	return 0;
}

           

运行结束后,该目录下会产生1.txt和2.txt

PCL环境配置--win10+VS2019+PCL1.11.1

该代码是按行提取的,检查一下如果名称全是*d.lib则复制其到Debug的依赖里去,如果全是*.lib则复制其到Release的依赖项里。(两个0.txt一样操作,记住复制之前一定要保证把文件里面内容0.txt和pkgconfig(可能有,搜索一下)删掉,总之没有.lib为后缀的都删掉)。

注意再检查一下,每个依赖都是一行,因为一旦输入错,编译就会报错。 

PCL环境配置--win10+VS2019+PCL1.11.1
PCL环境配置--win10+VS2019+PCL1.11.1

还有最后一步,将SDL检查关闭

PCL环境配置--win10+VS2019+PCL1.11.1
PCL环境配置--win10+VS2019+PCL1.11.1

肯最后编译还是报错,因为这两个SDL都不是最高层,项目->属性里将SDL关闭 

PCL环境配置--win10+VS2019+PCL1.11.1
PCL环境配置--win10+VS2019+PCL1.11.1

至于还有错或者警报编号4996:PCL use getColor() without parameters instead的

在头文件point_cloud_color_handlers.h中注释掉109行和611行

PCL环境配置--win10+VS2019+PCL1.11.1
PCL环境配置--win10+VS2019+PCL1.11.1

或者

PCL环境配置--win10+VS2019+PCL1.11.1

建立一个源文件 

PCL环境配置--win10+VS2019+PCL1.11.1

输入代码

#include <iostream>
#include <pcl/io/pcd_io.h>
#include <pcl/point_types.h>
int  main(int argc, char** argv)
{
    pcl::PointCloud<pcl::PointXYZ> cloud;   // Fill in the cloud data  
    cloud.width = 5;
    cloud.height = 1;
    cloud.is_dense = false;
    cloud.points.resize(cloud.width * cloud.height);
    for (std::size_t i = 0; i < cloud.points.size(); ++i)
    {
        cloud.points[i].x = 1024 * rand() / (RAND_MAX + 1.0f);
        cloud.points[i].y = 1024 * rand() / (RAND_MAX + 1.0f);
        cloud.points[i].z = 1024 * rand() / (RAND_MAX + 1.0f);
    }
    pcl::io::savePCDFileASCII("test_pcd.pcd", cloud);
    std::cerr << "Saved " << cloud.points.size() << " data points to test_pcd.pcd." << std::endl;
    for (std::size_t i = 0; i < cloud.points.size(); ++i)
        std::cerr << "    " << cloud.points[i].x << " " << cloud.points[i].y << " " << cloud.points[i].z << std::endl;
    return (0);
}
           

 能显示数据就算配置成功了

PCL环境配置--win10+VS2019+PCL1.11.1

第一次写文章,可能写的不是很好,如果还是有问题的朋友可以回头再看两遍或者参考其他教程。

继续阅读