3D点云处理 PCL部署使用
pcl是3D点云处理的必须算法,比肩图像算法中的opencv ,是国内自主开发开源的算法包,适合所有需要处理点云的算法工程师的必备技能。应用范围极其广泛,自动驾驶相关应用的经典算法库。从理论到实际,从实验到应用,记录学习pcl算法的学习之路。
算法的范围,PCL 是指纳入了多种操作点云数据的三维处理算法,其中包括过滤、特征估计、表面重建、模型拟合和分割、定位搜索...
系统:ubuntu20.04
下载最新的算法部署包。
https://github.com/PointCloudLibrary/pcl/releases
点击链接下载
下载解压后,编译。
在解压的文件夹下编译PCL算法库。
mkdir build
cd build
cmake ..
make
make install
等待编译和部署完成。
安装完成
安装完成迫不及待
下面是网上找的测试代码。
#include <pcl/point_cloud.h>
//点类型定义头文件
#include <pcl/kdtree/kdtree_flann.h> //kdtree类定义头文件
#include <iostream>
#include <vector>
#include <ctime>
int
main (int argc, char** argv)
{
srand (time (NULL)); //用系统时间初始化随机种子
//创建一个PointCloud<pcl::PointXYZ>
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); // // 产生数值为0-1024的浮点数
cloud->points[i].y = 1024.0f * rand () / (RAND_MAX 1.0f);
cloud->points[i].z = 1024.0f * rand () / (RAND_MAX 1.0f);
}
//创建KdTreeFLANN对象,并把创建的点云设置为输入,创建一个searchPoint变量作为查询点
pcl::KdTreeFLANN<pcl::PointXYZ> kdtree; // pcl::KdTreeFLANN<PointT, Dist>::setInputCloud (const PointCloudConstPtr &cloud, const IndicesConstPtr &indices)
//设置搜索空间
kdtree.setInputCloud (cloud);
//设置查询点并赋随机值
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);
// K 临近搜索
//创建一个整数(设置为10)和两个向量来存储搜索到的K近邻,两个向量中,一个存储搜索到查询点近邻的索引,另一个存储对应近邻的距离平方
int K = 10;
std::vector<int> pointIdxNKNSearch(K);
//存储查询点近邻索引
std::vector<float> pointNKNSquaredDistance(K); //存储近邻点对应距离平方
//打印相关信息
std::cout << "K nearest neighbor search at (" << searchPoint.x
<< " " << searchPoint.y
<< " " << searchPoint.z
<< ") with K=" << K << std::endl;
if ( kdtree.nearestKSearch (searchPoint, K, pointIdxNKNSearch, pointNKNSquaredDistance) > 0 ) //执行K近邻搜索
{
//打印所有近邻坐标
for (size_t i = 0; i < pointIdxNKNSearch.size (); i)
std::cout << "
" << cloud->points[ pointIdxNKNSearch[i] ].x
<< " " << cloud->points[ pointIdxNKNSearch[i] ].y
<< " " << cloud->points[ pointIdxNKNSearch[i] ].z
<< " (squared distance: " << pointNKNSquaredDistance[i] << ")" << std::endl;
}
/**********************************************************************************
下面的代码展示查找到给定的searchPoint的某一半径(随机产生)内所有近邻,重新定义两个向量
pointIdxRadiusSearch pointRadiusSquaredDistance来存储关于近邻的信息
********************************************************************************/
// 半径 R内近邻搜索方法
std::vector<int> pointIdxRadiusSearch;
//存储近邻索引
std::vector<float> pointRadiusSquaredDistance; //存储近邻对应距离的平方
float radius = 256.0f * rand () / (RAND_MAX 1.0f); //随机的生成某一半径
//打印输出
std::cout << "Neighbors within radius search at (" << searchPoint.x
<< " " << searchPoint.y
<< " " << searchPoint.z
<< ") with radius=" << radius << std::endl;
// 假设我们的kdtree返回了大于0个近邻。那么它将打印出在我们"searchPoint"附近的10个最近的邻居并把它们存到先前创立的向量中。
if ( kdtree.radiusSearch (searchPoint, radius, pointIdxRadiusSearch, pointRadiusSquaredDistance) > 0 ) //执行半径R内近邻搜索方法
{
for (size_t i = 0; i < pointIdxRadiusSearch.size (); i)
std::cout << "
" << cloud->points[ pointIdxRadiusSearch[i] ].x
<< " " << cloud->points[ pointIdxRadiusSearch[i] ].y
<< " " << cloud->points[ pointIdxRadiusSearch[i] ].z
<< " (squared distance: " << pointRadiusSquaredDistance[i] << ")" << std::endl;
}
return 0;
}
可以看到输出结果说明我们的pcl库已经部署ok,并且可以正常使用。
1.首先编写代码到main.cpp文件内。
2.随后构建CmakeList.txt
cmake_minimum_required(VERSION 2.8 FATAL_ERROR)
project(test)
find_package(PCL 1.13 REQUIRED)
include_directories(${PCL_INCLUDE_DIRS})
link_directories(${PCL_LIBRARY_DIRS})
add_definitions(${PCL_DEFINITIONS})
add_executable(test main.cpp)
target_link_libraries(test ${PCL_LIBRARIES})
3.编译
mkdir build
cd build
cmake ..
make
4.运行
会在build文件夹下生成可执行文件结果如下:
./test
运行成功,输出结果
随后等待继续理论学习。
关于抖音电商,还有哪些增量可以拿?
不到三年时间,抖音电商不断发展。2020年,以罗永浩为代表的名人明星掀起直播带货热潮。内容电商随之破圈,成为同年618、双11的新生力量。2021年,抖音电商正式提出“兴趣电商”定位,次年又再升级为“全域兴趣电商”,“货找人”和“人找货”双向覆盖。而当内容和货架结合,一系列新变量又带来了新机会。站长网2023-05-18 14:02:200000Adobe 的 Firefly AI 可加速视频制作
Adobe计划将生成式AI服务Firefly集成到现有的视频编辑工作流程中,并成为视频制作的自动辅助,有望缩短后期制作时间。该公司也在探索将文本转换为视频模型的可能性。此外,Adobe还在NAB会议上发布了AdobePremierePro的文本编辑功能。细节:Adobe计划将生成式AI服务Firefly集成到现有的视频编辑工作流程中,成为视频制作的自动辅助。站长网2023-04-19 09:40:530000清华芯片新突破登Science,获评“存算一体领域重大进展”!基于类脑架构实现片上快速AI学习
清华最新芯片成果,登上Science!全球首颗全系统集成、支持高效片上学习的忆阻器存算一体芯片,正式问世。它集合了记忆、计算和学习能力。能在片上快速完成不同任务的模型训练。而能耗仅为先进工艺下ASIC的1/35,能效有望提升75倍,同时兼顾保护隐私。这就是由清华大学集成电路学院吴华强教授、高滨副教授团队带来的最新成果。相关话题已经登顶知乎热榜。Science编辑评价其为:站长网2023-10-12 11:23:530000最新研究:AI发展使女性面临更大的失业风险
根据一项最新研究,人工智能(AI)的发展可能会让女性面临更大的失业风险。这项由麦肯锡全球研究院发布的研究指出,到2030年,近80%的女性将不得不换公司或失去工作,因为人工智能和自动化技术将取代他们的工作岗位。站长网2023-07-27 11:12:380000前谷歌研究人员筹集 3000 万美元在日本开发人工智能
**划重点:**1.🚀**资金规模:**SakanaAI宣布成功筹集3000万美元的种子轮融资。2.💼**投资方阵容:**美国LuxCapital和KhoslaVentures领投,索尼、NTT、KDDI等知名公司也参与投资。3.🤖**研发重心:**公司将专注于未来一两年的研发,探索基于更小型“代理”网络的人工智能系统。站长网2024-01-17 11:13:550000