PCL 三维点云轮廓提取
PCL 三维点云轮廓提取
建一个pclfive文件夹,建一个pclfive.cpp文档如下:
#include <iostream>
#include <pcl/range_image/range_image.h>//深度图有关文件
#include <pcl/visualization/pcl_visualizer.h>//点云可视化头文件
#include <pcl/io/pcd_io.h>//pcd文件输入/输出
#include <pcl/visualization/range_image_visualizer.h>//rangeImage可视化头文件
#include <pcl/common/common_headers.h>
#include <pcl/console/parse.h>//命令行参数解析
#include <boost/thread/thread.hpp>//多线程文件
#include <pcl/visualization/common/float_image_utils.h>//保存深度图像
#include <pcl/io/png_io.h>//保存深度图像int main (int argc, char** argv) {//读入点云数据// pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_in(new pcl::PointCloud<pcl::PointXYZ>);// pcl::io::loadPCDFile("room_scan1.pcd",*cloud_in);pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_in(new pcl::PointCloud<pcl::PointXYZ>);//生成数据for (float y=-0.5f; y<=0.5f; y+=0.01f) {for (float z=-0.5f; z<=0.5f; z+=0.01f) {pcl::PointXYZ point;point.x = 2.0f - y;point.y = y;point.z = z;cloud_in->points.push_back(point);}}cloud_in->width = (uint32_t) cloud_in->points.size();cloud_in->height = 1;//以1度为角分辨率,从上面创建的点云创建深度图像。float angularResolution = (float) ( 1.0f * (M_PI/180.0f));
// 1度转弧度float maxAngleWidth = (float) (360.0f * (M_PI/180.0f));
// 360.0度转弧度float maxAngleHeight = (float) (180.0f * (M_PI/180.0f));
// 180.0度转弧度Eigen::Affine3f sensorPose = (Eigen::Affine3f)Eigen::Translation3f(0.0f, 0.0f, 0.0f);pcl::RangeImage::CoordinateFrame coordinate_frame = pcl::RangeImage::CAMERA_FRAME;float noiseLevel=0.00;float minRange = 0.0f;int borderSize = 1;pcl::RangeImage rangeImage;rangeImage.createFromPointCloud(*cloud_in, angularResolution, maxAngleWidth, maxAngleHeight, sensorPose, coordinate_frame, noiseLevel, minRange, borderSize);
std::cout << rangeImage << "\n";//重载运算符<<pcl::visualization::PCLVisualizer::Ptr viewer(new pcl::visualization::PCLVisualizer("CloudPointView"));
viewer->initCameraParameters();int v1(0);
//viewer->createViewPort(0,0,0.5,1,v1);
viewer->setBackgroundColor(255,255,255,v1);
pcl::visualization::PointCloudColorHandlerCustom<pcl::PointXYZ> color1(cloud_in->makeShared(),255,0,0);
viewer->addPointCloud(cloud_in->makeShared(),color1,"pointCloud",v1);viewer->addCoordinateSystem();
//viewer->spin();//这句话不注释掉会导致只显示点云图而不显示深度图的窗口//save depth picturefloat *ranges = rangeImage.getRangesArray();unsigned char* rgb_image = pcl::visualization::FloatImageUtils::getVisualImage(ranges,rangeImage.width,rangeImage.height);pcl::io::saveRgbPNGFile("saveRangeImageRGB.png",rgb_image,rangeImage.width,rangeImage.height);std::cerr << "Picture Saved!" << std::endl;//可视化深度图像rangeImage
pcl::visualization::RangeImageVisualizer range_image_widget("Range image");//创建Range image显示的对象
range_image_widget.setWindowTitle("RangeImage");
range_image_widget.showRangeImage(rangeImage);while (!range_image_widget.wasStopped ()&& !viewer->wasStopped()){range_image_widget.spinOnce ();viewer->spinOnce();pcl_sleep (0.01);}return 0 ;
}
在同文件夹下写入配置文件:CMakeLists.txt,如下:
cmake_minimum_required(VERSION 2.6)
project(pclfive)find_package(PCL 1.2 REQUIRED)include_directories(${PCL_INCLUDE_DIRS})
link_directories(${PCL_LIBRARY_DIRS})
add_definitions(${PCL_DEFINITIONS})add_executable(pclfive pclfive.cpp)target_link_libraries (pclfive ${PCL_LIBRARIES})install(TARGETS pclfive RUNTIME DESTINATION bin)
在同文件夹下建立build建一个build文件夹。
开始编译:
1、在build文件夹中打开终端(在文件夹下右键+T)
2、终端输入
cmake ..
3、终端输入
make
4、终端输入
./pclfive
PCL 三维点云轮廓提取相关推荐
- 三维点云目标提取总结(续)
三维点云目标提取(续) 3.三维点云目标提取 3.1一般流程 先根据个人认识总结一下目标提取的一般性步骤: 如上所示,三维点云的目标提取关键性的两步即为:特征提取与选择.分类,是不是整个方法流程与图像 ...
- 3D点云基础知识(二)-bilibili视频资源整理(二)鞋点胶点云轮廓提取
资料来源:超人视觉免费启蒙三维课程入门(第六节)3D鞋点胶的点云边界(轮廓)提取 相似案例:Halcon三维测量(3):鞋底涂胶+边缘提取 Halcon学习方法强调:从案例当中学习:最重要是思路和算子 ...
- PCL三维点云拼接融合技术
转自:https://blog.csdn.net/dcba2014/article/details/71859375?locationNum=2&fps=1 本例使用pcd格式点云文件进行配准 ...
- 简单平面点云的内外侧轮廓提取
原点云如图所示: 外侧轮廓提取用的方法是经纬线扫描法,全轮廓提取的方法是alpha shapes算法(点云边界提取方法总结),从全轮廓中剔除外侧轮廓得到内侧轮廓. alpha shapes算法轮廓提取 ...
- 概述—基于机载LiDAR点云数据的建筑物轮廓提取
一.机载LiDAR系统介绍 机载激光雷达测量技术的英文名称是LiDAR, LiDAR是英文Light Detection And Ranging(光探测与光测距)的缩写,是融合了 GPS.INS.激光 ...
- PCL+opencv通过2D方式提取点云边缘
1.2D方法提取边缘的原因 如上图所示我们通过PCL常规的方法提取边缘后是有内边缘和外边缘的,假设我们需要的是外边缘可能需要做一些诸如聚类分割的方法,给我们带来许多不便. 2.2D方法的思路 熟悉op ...
- 使用PCL从CAD模型中提取不同视角下的点云
使用PCL从CAD模型中提取不同视角下的点云 最近在做一个关于提取不同视角下点云的算法,看了许多关于这方面的博客,也查了许多资料. 链接:https://blog.csdn.net/qq_196009 ...
- PCL中点云关键点提取
PCL中点云关键点提取 1 关键点概念及相关算法 1.1 NARF关键点 1.2 Harris关键点 1.3 PCL中keypoints模块及类介绍 2 关键点入门级实例解析 2.1 如何从深度图像中 ...
- PCL 三维 CAD 模型 (obj、ply) 转点云 pcd 文件格式
PCL 三维 CAD 模型 (obj.ply) 转点云 pcd 文件格式 利用 PCL 自带的程序可以将三维 CAD 模型 (obj.ply) 文件转为点云 pcd 文件格式. 打开安装的 PCL 安 ...
最新文章
- C语言之分支结构 if(一)
- windows部署微服务jar包 yml_杰克布开源项目,低代码开发框架,Docker快速部署
- Kali Linux安装OpenVAS
- Linux复习资料——MySQL-client-5.6.50-1.el7.x86_64与MySQL-server-5.6.50-1.el7.x86_64包安装MySQL全过程
- git 使用_Git使用总结
- SqlDataReader对象的NextResult方法读取存储过程多个结果集
- matlab 安装jdbc.jar
- UVA 1611 Crane
- 报错:The following signatures couldn‘t be verified because the public key is not available: NO_PUBKEY
- 二、语音合成(TTS)
- sda、sdb 在linux中是什么意思
- 100个精彩的开源游戏
- C# Span 入门
- 一款在线免费的甘特图,让你轻松管理项目进度
- 微信朋友圈输入框加发送测试用例总结
- mysql 计算gps坐标距离_mysql实现经纬度计算两个坐标之间的距离
- 阿里云ACP云计算错题集41-70
- conda安装新环境
- [转载]中国最致命的薄弱环节!(一个机械类毕业生的心声)
- js数组常用方法(19种)|你会的到底有多少呢?