Windows10上配置PCL点云库

文章禁止转载,因为转载的,第一排版难看,第二不说明出处,所以不许转载。(但是人家要转载,我也不知道,除非收费)

原理说明

配置这种PCL点云库,思想就是让编译软件能够找到那些库啊,包啊等等吧。

吐槽

这种东西,真的是人家开发商就一点都不担心用户的问题,不管多难配置,人家开发商就有信心,我们就是会用。像其他应用,例如有道词典啊,或者百度网盘啊,对比下来真的是地位卑微,软件安装完以后,自动就嵌入到了word或者此电脑里面了,生怕我们多花一点时间去配置,言归正传,开始吧。

开始

需要的东西: visual studio 2019,PCL1.11.1(我用的是这个版本,建议用这个对应的版本吧)

PCL1.11.1下载

下载地址:先下载这两个文件
在这里插入图片描述

PCL1.11.1安装

安装PCL-1.11.1-AllInOne-msvc2019-win64.exe

第一步:欢迎使用(跳过);

第二步:许可证协议(跳过);

第三步:如下图,点第二个,添加环境变量
在这里插入图片描述
第四步:安装目录(这个肯定要记一下)
在这里插入图片描述
第五步:安装结束(没有图)

安装OpenNI-Windows-x64-2.2.msi

上面的安装结束以后,打开这个文件夹D:\Install\PCL 1.11.1\3rdParty\OpenNI2,里面有个OpenNI-Windows-x64-2.2.msi文件,打开它,进行安装。
第一步:欢迎安装(跳过);
第二步:我这边已经安装过了,所以会出现移除或者修复,想重新安装肯定是选择remove,估计看这个教程很多人都是第一次安装,那就选change,将路径选择到D:\Install\PCL 1.11.1\3rdParty\OpenNI2这里安装就行。就不要问我为什么安装到D:\Install\PCL 1.11.1\3rdParty\OpenNI2这里了。
在这里插入图片描述
安装完以后,内容如下所示。到这里,PCL-1.11.1-AllInOne-msvc2019-win64.exe就安装完了,但我们一开始下载了两个文件,还有一个pcl-1.11.1-pdb-msvc2019-win64文件没弄。
在这里插入图片描述

pcl-1.11.1-pdb-msvc2019-win64安装

这个文件就很简单了,把这里面所有的.pdb文件全部复制到D:\Install\PCL 1.11.1\bin里面去。文件就这么些,该安装的都安装完了,然后就开始配置环境变量吧,这样方便编译软件能够找到这些文件。

环境变量配置

这些系统变量,复制进去

%PCL_ROOT%\bin
%PCL_ROOT%\3rdParty\VTK\bin
%PCL_ROOT%\3rdParty\FLANN\bin
%OPENNI2_REDIST64%
%PCL_ROOT%\3rdParty\Qhull\bin
%PCL_ROOT%\3rdParty\OpenNI2\Tools

估计不好理解,图片打个样吧。按照这种,上下都复制一遍
在这里插入图片描述
在这里插入图片描述
最后在系统变量里面,就是下面这个样子,就这么六条。
在这里插入图片描述
到这里,环境变量就配置完了,然后就开始去配置Visual studio2019吧,那边东西多一点,等我喝口水,慢慢来。

Visual studio2019配置

第一步:新建空白项目
在这里插入图片描述
第二步:选C++
在这里插入图片描述
第三步:文件命名(跳过)
第四步:新建一个c++文件。右击源文件->添加->新建项,然后这种
在这里插入图片描述
第五步:改为Debug×64
在这里插入图片描述
第六步:右击项目名称那里,找到属性
在这里插入图片描述
这里也改为Debug和×64
在这里插入图片描述
配置管理器里面也改一下。(配置管理器上图中有,看一下,篮框)
在这里插入图片描述
下面的事情就分五步,这六步搞定,马上收工。

六步

第一步:配置包含目录和源目录。

将这些目录放到VC++目录->包含目录->源目录里面。看一下自己的目录是什么,对照的稍微调一下。

$(PCL_ROOT)\include\pcl-1.11;$(PCL_ROOT)\3rdParty\Boost\include\boost-1_74;$(PCL_ROOT)\3rdParty\Eigen\eigen3;$(PCL_ROOT)\3rdParty\FLANN\include;$(PCL_ROOT)\3rdParty\Qhull\include;$(PCL_ROOT)\3rdParty\VTK\include\vtk-8.2;$(PCL_ROOT)\3rdParty\OpenNI2\Include;

在这里插入图片描述
第二步:配置库目录。

将这些目录放到VC++目录->库目录里面。看一下自己的目录是什么,对照的稍微调一下。

$(PCL_ROOT)\lib;$(PCL_ROOT)\3rdParty\Boost\lib;$(PCL_ROOT)\3rdParty\FLANN\lib;$(PCL_ROOT)\3rdParty\Qhull\lib;$(PCL_ROOT)\3rdParty\VTK\lib;$(PCL_ROOT)\3rdParty\OpenNI2\Lib;

在这里插入图片描述
第三步:配置调试->环境

将这些目录放到调试->环境里面。看一下自己的目录是什么,对照的稍微调一下。

PATH=$(PCL_ROOT)\bin;$(PCL_ROOT)\3rdParty\FLANN\bin;$(PCL_ROOT)\3rdParty\VTK\bin;$(PCL_ROOT)\3rdParty\OpenNI2\Tools;

在这里插入图片描述
第四步:配置C/C++->预处理器->预处理器定义

将这些目录放到C/C++->预处理器->预处理器定义里面。这个不用改

_SCL_SECURE_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;

在这里插入图片描述
第五步:配置链接器->输入->附加依赖项

这里要认真看,不要偷懒哦,宝贝们。

这里有两个版本的附加依赖项,很多教程直接就放一大串的文件名,让大家复制进去,这是不对的,我来和大家说一下,怎么来生成自己的那些文件名吧。

只需要将D:\Install\PCL 1.11.1\3rdParty\VTK\libD:\Install\PCL 1.11.1\lib这两个文件夹下的lib文件分开就是。文件夹中*.lib是release版本,*d.lib是debug版本,我用的是debug版本。

首先来到D:\Install\PCL 1.11.1\lib文件夹下面,打开cmd
在这里插入图片描述
cmd中输入这条命令dir /b *.lib *>0.txt,会生成一个0.txt文件,把0.txt里面的0.txtpcl_visualizationd.lib pkgconfig删了。0.txt里面包含两个版本的文件名。我们需要将它们分开。最后分吧。
在这里插入图片描述
同样来到D:\Install\PCL 1.11.1\3rdParty\VTK\lib文件夹下面,打开cmd,输入这条命令dir /b *.lib *>1.txt,会生成一个1.txt文件,把1.txt里面的1.txtcmake删了。1.txt里面包含两个版本的文件名。我们需要将它们分开。最后分吧。
在这里插入图片描述
现在我们有两个文档0.txt和1.txt,分开就行,用python分吧,快的很。代码如下

debug_file = open("debug.txt", 'w+')

with open('0.txt') as f:
    i = 0
    for line in f:
        if i % 2 == 1:
            print(line.strip(), file=debug_file)
        i = i + 1
        
with open('1.txt') as f:
    i = 0
    for line in f:
        if i % 2 == 0:
            print(line.strip(), file=debug_file)
        i = i + 1

文件目录结构如下所示。
在这里插入图片描述
然后在debug.txt里面就有很多的*d.lib文件名,现在复制到附加依赖项里面就行。
在这里插入图片描述
第六步:设置一些选项

到这里其实应该就没啥大问题了,不过可能还要设置一点,也不难,跟着来吧。
第一个
在这里插入图片描述
第二个
在这里插入图片描述

测试代码

到这里,就全部设置完了,下面来一段代码测试吧。

#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);
}

出现下面的图片,搞定的同学,到点吃饭;没搞定的,继续百度,必应,谷歌。
在这里插入图片描述

参考来源

任何一篇文章都不是空穴来风,这里标出参考来源

B站
CSDN博客一
CSDN博客二

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值