【编程实践】利用pcl实现点云凸包点生成

news2024/12/23 8:55:56

1 运行结果

在这里插入图片描述
生成的凸包点与原点云的可视化
在这里插入图片描述

2 代码实现

// convex hull

#include <pcl/point_types.h>
#include <pcl/io/pcd_io.h>
#include <pcl/io/vtk_io.h>
#include <pcl/surface/convex_hull.h>
#include <pcl/visualization/pcl_visualizer.h>
#include <pcl/surface/gp3.h>
#include <pcl/surface/organized_fast_mesh.h>
#include <pcl/features/normal_3d.h>
#include <pcl/filters/project_inliers.h>
#include <ctime>
#include <iostream>
using namespace std;

int main()
{
	pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_in(new pcl::PointCloud<pcl::PointXYZ>); //存放读取点云的对象
	pcl::PCDReader reader;	//定义点云读取对象
	if (reader.read(".\\input\\Kuangshan_long.pcd", *cloud_in) < 0)
	{
		PCL_ERROR("\a->The file does not exist.\n");
		system("pause");
		return -1;
	}
	cout << "You have loaded " << cloud_in->points.size() << " points. " << endl;
	//=========================创建凸包可视化==========================
	pcl::ConvexHull<pcl::PointXYZ> convex_hull;
	convex_hull.setInputCloud(cloud_in);
	pcl::PointCloud<pcl::PointXYZ>::Ptr hull_out(new pcl::PointCloud<pcl::PointXYZ>);
	convex_hull.reconstruct(*hull_out);
	pcl::visualization::PCLVisualizer viewer("ConvexHull Vis");
	pcl::visualization::PointCloudColorHandlerCustom<pcl::PointXYZ> color(cloud_in, 255, 0, 0);
	viewer.addPointCloud<pcl::PointXYZ>(cloud_in, color, "cloud_in");
	pcl::visualization::PointCloudColorHandlerCustom<pcl::PointXYZ> color_cx(hull_out, 0, 255, 0);
	viewer.addPointCloud<pcl::PointXYZ>(hull_out, color_cx, "hull_out");
	for (size_t i = 0; i < hull_out->size(); ++i)
	{
		size_t next_index = (i + 1) % hull_out->size();
		pcl::PointXYZ point1 = hull_out->points[i];
		pcl::PointXYZ point2 = hull_out->points[next_index];
		viewer.addLine<pcl::PointXYZ>(point1, point2, 255, 255, 255, "line" + std::to_string(i));

	}
	viewer.setBackgroundColor(0, 0, 0);
	viewer.setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 1, "cloud_in");
	viewer.setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 3, "hull_out");
	//获取当前时间
	std::time_t now = std::time(nullptr);
	//时间转化为本地时间
	std::tm* localTime = std::localtime(&now);
	int year_lt = localTime->tm_year + 1900;
	int month_lt = localTime->tm_mon + 1;
	int day_lt = localTime->tm_mday;
	int ymd_lt = year_lt * 10000 + month_lt * 100 + day_lt;
	std::string ymd_str = std::to_string(ymd_lt);
	///保存为PCD格式
	if (!hull_out->empty())
	{
		pcl::io::savePCDFile(".\\output\\0912\\ConvexHull_result" + ymd_str + ".pcd", *hull_out);
		cout << "->(ASICC)The number of PointHull saved is: " << hull_out->points.size() << endl;
	}
	else
	{
		PCL_ERROR("\a->保存点云为空!\n");
		system("pause");
		return -1;
	}
	cout << "Process done!" << endl;
	
	while (!viewer.wasStopped())
	{
		viewer.spinOnce();
	}
	return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1006399.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【pythonflask-1】简单实现加减乘除输入界面

app.py import flask from flask import Flask, render_template, request # 计算精确的浮点结果&#xff0c;float加法也计算不出来 from decimal import Decimalapp Flask(__name__)app.route(/) def home():return render_template(index.html)app.route(/calculate, meth…

【rgbd_benchmark_tools】TUM RGBD数据集基准测试工具使用调试记录,SLAM评估

cgmcgm:~/文档/rgbd_benchmark_tools$ /bin/python /home/cgm/文档/rgbd_benchmark_tools/src/rgbd_benchmark_tools/evaluate_ate.py Traceback (most recent call last):File "/home/cgm/文档/rgbd_benchmark_tools/src/rgbd_benchmark_tools/evaluate_ate.py", li…

警惕!1本SCI解除“On Hold”,Chemosphere等11本期刊仍被标记!

期刊动态&#xff1a;警惕期刊“On Hold”状态&#xff01; 2023年8月&#xff0c;小编从科睿唯安官网整理出12本期刊处于“On Hold”状态&#xff01; 参考往期推文&#xff1a; 警惕&#xff01;10本“On Hold”期刊已被踢&#xff0c;仍有12本期刊被标记&#xff01; 期…

TC测试自动化Shell脚本

在使用TC测试的发现手动进行丢包延迟抖动等场景的组合以及TC命令的切换效率很低&#xff0c;写了一个脚本可以提升效率&#xff0c;也可以根据自己的需求进行脚本更改&#xff01; 使用方法&#xff1a; 1&#xff09;运行sh脚本 2&#xff09;输入TC想要限制的网卡名和服务器…

【板栗糖GIS】——如何在两个电脑间同步简悦插件高级账户

【板栗糖GIS】——如何在两个电脑间同步简悦插件高级账户 目录 1. 找到账户UID 2. 复制UID 3. 在另一台装简悦插件的电脑修改成同样的UID 简悦是一款很好用的资料收集以及阅读插件,具体介绍可以在官网进行查看 简悦 SimpRead - 如杂志般沉浸式阅读体验的扩展 今天我只是想…

JAVAEE初阶相关内容第九弹--多线程(初阶)

目录 定时器 定时器是什么 标准库中的定时器 实现定时器 以上的代码存在两个问题 &#xff08;1&#xff09;MyTask没有指定优先级 &#xff08;2&#xff09;阻塞队列不满足还得塞回去 以上代码还存在一个问题: 完整代码实现 定时器 定时器是什么 类似于定闹钟一样。…

六、全局约束中的Alldifferen和Cumulative的实现

文章目录 1、Alldifferent的内部实现1.1 防御怪物问题1.2 Alldifferent 值域传播器 2、Cumulative的内部实现THE END 1、Alldifferent的内部实现 1.1 防御怪物问题 \qquad 假设有 N N N个村庄和 K K K支军队&#xff0c;且满足 K ≥ N K \geq N K≥N&#xff0c;每支军队都与某…

android studio platform使用体验分享(as无法跳转c/c++等native源码的福音,强烈推荐)

hi&#xff0c;粉丝朋友们&#xff1a; 大家好&#xff01;这些天粉丝朋友们分享了一下Android Studio for Platform 这个最新的google开发的阅读aosp源码的工具&#xff0c;特别适合做原生系统开发。具体官方介绍如下地址&#xff1a; 参考链接&#xff1a;https://developer.…

《动手学深度学习 Pytorch版》 4.6 暂退法

import torch from torch import nn from d2l import torch as d2l4.6.1 重新审视过拟合 整节理论&#xff0c;详见书本。 4.6.2 扰动的稳健性 整节理论&#xff0c;详见书本。 4.6.3 实践中的暂退法 整节理论&#xff0c;详见书本。 4.6.4 从零开始实现 def dropout_la…

《C和指针》笔记24: 指针和间接访问

本文主要讲指针和间接访问&#xff0c;标题对应《C和指针对应的章节》&#xff0c;引用的地方是自己写的一些注释、理解和总结。 指针、间接访问和左值 先回顾一下左值和右值 左值代表着一个位置。右值代表着一个值。赋值等号左边是个左值&#xff0c;赋值等号右边是一个右值…

fabirc 将图像绘制原点定为图形内部

添加元素时&#xff0c;设置属性&#xff1a; originX: center, originY: center, 如我定义两个矩形&#xff1a; addrect () { // 矩形1var rect new fabric.Rect({top: 50,left: 100,width: 100,height: 70,fill: #F56C6C,strokeUniform: true // 限制边框宽度缩放})canva…

vue2实现自定义主题webpack-theme-color-replacer

需求&#xff1a;根据element的自定义主题色&#xff0c;之后改变element的全局所有颜色&#xff0c;解决页面刷新后主题色失效问题&#xff0c;这个需要把颜色存入到浏览器的存储中&#xff0c;如果换个浏览器就得重新选择了哈&#xff0c;如果需要在不同的浏览器保持一致的主…

langchain主要模块(四):Memory

langchain2之Memory langchain1.概念2.主要模块模型输入/输出 (Model I/O)数据连接 (Data connection)链式组装 (Chains)代理 (Agents)内存 (Memory)回调 (Callbacks) 3.MemoryConversationBufferMemoryConversationBufferWindowMemoryConversationTokenBufferMemoryConversati…

Error: svn: E155004: Run ‘svn cleanup‘ to remove locks

解决办法如下&#xff1a;点击settings 点击清除缓存按钮&#xff0c;然后再使用svn进行提交更新操作&#xff0c;但是可能还会有其它的错误&#xff0c;比如svn: E230001: Server SSL certificate verification failed&#xff0c;解决这个错误请参考我另一篇文章&#xff1a;…

【LeetCode: 2596. 检查骑士巡视方案:深度优先搜索】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

力扣 -- 300. 最长递增子序列

解题步骤&#xff1a; 参考代码&#xff1a; class Solution { public:int lengthOfLIS(vector<int>& nums) {int nnums.size();vector<int> dp(n,1);int ret1;for(int i0;i<n;i){for(int j0;j<i;j){if(nums[j]<nums[i]){dp[i]max(dp[i],dp[j]1);}}r…

分布式系统第五讲:分布式事务及实现方案

分布式系统第五讲&#xff1a;分布式事务及实现方案 事务是一个程序执行单元&#xff0c;里面的所有操作要么全部执行成功&#xff0c;要么全部执行失败。而分布式事务是指事务的参与者、支持事务的服务器、资源服务器以及事务管理器分别位于不同的分布式系统的不同节点之上。本…

微服务07-认识MQ+RabbitMQ入门

1.前言 了解同步调用和异步调用 1.1.同步调用 比如这里的支付服务&#xff0c;需要等待订单服务、短信服务…执行完毕才能执行&#xff0c;这样支付整个流程完毕需要500ms 然后如果订单、仓储等其中一个服务挂掉了&#xff0c;那么支付服务请求请求不了&#xff0c;挂掉的服…

Python实现进制转换

1 问题 如何将一个数从十进制转换成二进制&#xff0c;这个数从键盘输入。 2 方法 &#xff08;1&#xff09;输入一个十进制的数; &#xff08;2&#xff09;将这个数除以2求商和余数 &#xff08;3&#xff09;再用2去除商&#xff0c;又会得到一个商和余数&#xff0c;如此进…

企业用设备管理系统有什么好处?的修大数据管理平台的功能强大吗?

在现代工业运营中&#xff0c;设备的高效管理与维护对于维持生产稳定及提升企业竞争力具有重大意义。而设备管理系统作为一项重要工具&#xff0c;可以极大地提高企业的生产效率与设备维护的准确性。 企业使用设备管理系统的原因如下&#xff1a;   提高设备利用率&#xff1…