网上关于pcl的教程很多,大部分都是翻译过来的。但是怎么把pcl这些教程串在一起,做一个简单的项目,这方面的资料不多。今天,正好看到一个范例项目,很有代表性,值得一看。
1、代码地址
https://github.com/veraposeidon/PointCloudVolumeMeasure
2、项目目标主要就是测量中间突出的那部分体积大小
3、查看CMakeLists.txt
cmake_minimum_required(VERSION 2.8 FATAL_ERROR)
project(openni_grabber)
find_package(PCL 1.8 REQUIRED)
include_directories(${PCL_INCLUDE_DIRS})
link_directories(${PCL_LIBRARY_DIRS})
add_definitions(${PCL_DEFINITIONS})
add_executable (openni_grabber volDetectVisualizer.cpp)
target_link_libraries (openni_grabber ${PCL_LIBRARIES})
#add_executable (openni_grabber openni_grabber.cpp)
#target_link_libraries (openni_grabber ${PCL_LIBRARIES})
从文件中发现,代码文件在volDetectVisualizer.cpp文件。
4、代码分析
从整个算法流程来看,主要分了这么几个步骤。
4.1 空间滤波,相当于roi裁剪
4.2 下采样,减少计算的数据量
4.3 统计滤波,去除异常点
4.4 地面切割
4.5 获取地面之外的点云信息
4.6 再次切割平面
4.7 利用得到的coefficients计算高度差
4.8 平面投影
4.9 为投影的点构建ConcaveHull
4.10 根据ConcaveHull获取轮廓,为opencv所使用
4.11 计算面积、体积
4.12 添加画面字符打印
5、opencv部分
算法中除了pcl,也使用到了opencv,主要是轮廓的处理这部分内容。
6、最终效果
7、其他
上面是pcl处理的基本流程,当然实际情况远不止这些。比如实际项目中还会构建模板,利用icp、ndt计算yaw、pitch、roll,这部分都可以活学活用,不用拘泥于形式。
注:
关于多平面点云分割,这个链接讲的也挺好,中间也涉及到了opencv的使用。
https://zhuanlan.zhihu.com/p/101476884
标签:pcl,练习,add,opencv,grabber,PCL,openni,激光雷达,3d From: https://blog.51cto.com/feixiaoxing/5881893