PCL 泊松重建

news2024/11/20 9:29:16

目录

  • 一、概述
  • 二、代码
  • 三、结果

一、概述

  PCL中的 pcl::Poisson<pcl::PointXYZRGBNormal>:函数实现泊松重建的代码示例。

二、代码

#include <iostream>
#include <pcl/io/pcd_io.h>
#include <pcl/io/ply_io.h>
#include <pcl/point_types.h>
#include <pcl/features/normal_3d.h>
#include <pcl/kdtree/kdtree_flann.h>
#include <pcl/surface/poisson.h>
#include <pcl/visualization/pcl_visualizer.h>
#include <boost/thread/thread.hpp>

// 可视化点云和mesh模型
void PointCloudandMeshViewer(pcl::PointCloud<pcl::PointXYZRGB>::Ptr& cloud, pcl::PolygonMesh& triangles)
{
	// 输出结果到可视化窗口
	boost::shared_ptr<pcl::visualization::PCLVisualizer> viewer(new pcl::visualization::PCLVisualizer("3D PointCloud Viewer"));
	// 设置视口1,显示原始点云
	int v1;
	viewer->createViewPort(0.0, 0.0, 0.5, 1.0, v1);  // 左侧窗口
	viewer->setBackgroundColor(0.0, 0.0, 0.0, v1);  // 黑色背景
	viewer->addText("Original PointCloud", 10, 10, "vp1_text", v1);  // 标题
	pcl::visualization::PointCloudColorHandlerCustom<pcl::PointXYZRGB> cloud_color_handler(cloud, 0, 255, 0);  // 绿色
	viewer->addPointCloud(cloud, cloud_color_handler, "original_cloud", v1);

	// 设置视口2,显示重建点云
	int v2;
	viewer->createViewPort(0.5, 0.0, 1.0, 1.0, v2);  // 右侧窗口
	viewer->setBackgroundColor(0.0, 0.0, 1.0, v2);   // 白色背景
	viewer->addText("mesh", 10, 10, "vp2_text", v2);
	viewer->addPolygonMesh(triangles, "triangles", v2);
	viewer->setRepresentationToWireframeForAllActors(); // 网格模型以线框图模式显示

	// 添加坐标系
   /* viewer->addCoordinateSystem(0.1);
	viewer->initCameraParameters();*/

	// 可视化循环
	while (!viewer->wasStopped())
	{
		viewer->spinOnce(100);
	}

}


int main()
{
	// 读取点云数据
	pcl::PointCloud<pcl::PointXYZRGB>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZRGB>);
	if (pcl::io::loadPCDFile("lamp.pcd", *cloud))
	{
		PCL_ERROR("Couldn't read the PCD files!\n");
		return -1;
	}
	// 计算法线
	pcl::NormalEstimation<pcl::PointXYZRGB, pcl::Normal> n;
	pcl::search::KdTree<pcl::PointXYZRGB>::Ptr tree(new pcl::search::KdTree<pcl::PointXYZRGB>);
	n.setInputCloud(cloud);
	n.setSearchMethod(tree);
	n.setKSearch(20);    // k邻域搜索范围
	pcl::PointCloud<pcl::Normal>::Ptr normals(new pcl::PointCloud<pcl::Normal>);
	n.compute(*normals);
	// 连接点坐标及法向量
	pcl::PointCloud<pcl::PointXYZRGBNormal>::Ptr cloudNormals(new pcl::PointCloud<pcl::PointXYZRGBNormal>);         
	pcl::concatenateFields(*cloud, *normals, *cloudNormals);
	// 泊松重建
	pcl::Poisson<pcl::PointXYZRGBNormal> ps;
	pcl::search::KdTree<pcl::PointXYZRGBNormal>::Ptr tree1(new pcl::search::KdTree<pcl::PointXYZRGBNormal>);
	tree1->setInputCloud(cloudNormals);
	ps.setSearchMethod(tree1);
	ps.setInputCloud(cloudNormals);
	ps.setDepth(6);             // 将用于表面重建的树的最大深度
	ps.setMinDepth(2);          // 将用于表面重建的树的最小深度
	ps.setScale(1.5);          // 用于重建的立方体的直径与样本的边界立方体直径的比值
	ps.setSolverDivide(3);      // 块高斯-塞德尔求解器用于求解拉普拉斯方程的深度。
	ps.setIsoDivide(6);         // 块等表面提取器用于提取等表面的深度
	ps.setSamplesPerNode(10);   // 每个八叉树节点上最少采样点数目
	ps.setConfidence(false);    // 置信标志,为true时,使用法线向量长度作为置信度信息,false则需要对法线进行归一化处理
	ps.setManifold(false);      // 流行标志,如果设置为true,则对多边形进行细分三角话时添加重心,设置false则不添加
	ps.setOutputPolygons(false);// 是否输出为多边形(而不是三角化行进立方体的结果)。

	pcl::PolygonMesh triangles;           // 存储最终三角化的网格模型
	ps.performReconstruction(triangles);
	
	pcl::io::savePLYFile("lamp.ply", triangles);
	// 输出可视化结果到渲染窗口
	PointCloudandMeshViewer(cloud, triangles);

	return (0);
}

三、结果

在这里插入图片描述

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

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

相关文章

Qt6.7开发安卓程序间接连接到MySQL的方法

本文主要描述一种通过间接的方法&#xff0c;使得Qt开发的安卓程序可以直连到Mysql数据库的方法。本文章的方案是通过JAVA代码去连接MySQL数据库&#xff0c;然后C代码去调用JAVA的方法&#xff0c;从而实现QT开发的安卓程序去直连到MySQL数据库。 本文使用 JDBC 结合 JNI&…

Windows 10 on ARM, version 22H2 (updated Sep 2024) ARM64 AArch64 中文版、英文版下载

Windows 10 on ARM, version 22H2 (updated Sep 2024) ARM64 AArch64 中文版、英文版下载 基于 ARM 的 Windows 10 请访问原文链接&#xff1a;https://sysin.org/blog/windows-10-arm/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&#xff1a;s…

加速 Python for 循环

在 Python 编程中&#xff0c;for 循环是开发者常用的工具之一&#xff0c;但它的执行速度经常让人感到不满。幸运的是&#xff0c;有许多方法可以显著提高 for 循环的效率。 本文将介绍几种简单而高效的优化技巧&#xff0c;帮助你加速Python for 循环&#xff0c;速度提升从…

[ComfyUI]Flux:超美3D微观山水禅意,经典中文元素AI重现,佛陀楼阁山水画卷

在数字艺术和创意领域&#xff0c;[ComfyUI]Flux以其独特的虚实结合技术&#xff0c;已经成为艺术家和设计师们手中的利器。今天&#xff0c;我们激动地宣布&#xff0c;[ComfyUI]Flux带来了一款超美的3D微观山水禅意作品&#xff0c;经典中文元素通过AI技术重现&#xff0c;包…

现实版宫斗剧《OpenAI传》,正在上演!

大家好&#xff0c;我是木易&#xff0c;一个持续关注AI领域的互联网技术产品经理&#xff0c;国内Top2本科&#xff0c;美国Top10 CS研究生&#xff0c;MBA。我坚信AI是普通人变强的“外挂”&#xff0c;专注于分享AI全维度知识&#xff0c;包括但不限于AI科普&#xff0c;AI工…

海外盲盒系统开发的机遇与挑战

随着全球消费市场的多元化&#xff0c;盲盒&#xff08;Blind Box&#xff09;作为一种新兴的商业模式&#xff0c;逐渐在各个国家和地区崭露头角。特别是在海外市场&#xff0c;盲盒的受欢迎程度不断攀升。这一现象引发了很多创业者和企业的关注&#xff0c;纷纷投入到海外盲盒…

FreeRTOS列表与列表项

1.什么是列表与列表项 列表与列表项实际上是FreeRTOS中一个大量使用的一种数据结构 1.列表 列表的概念有点像链表&#xff0c;在 FreeRTOS 中&#xff0c;列表主要用于以下几个方面&#xff1a; 任务的管理&#xff1a;FreeRTOS 使用列表来管理不同的任务&#xff0c;包括就…

使用Rasterio处理栅格数据——RaterIO介绍

1. 依赖关系 RasterIO 有一个C库依赖项: GDAL >=1.11 。 GDAL 本身依赖于大多数主要操作系统提供的许多其他库,也依赖于非标准 Geos 和 Proj4 库。 Python 包依赖项(另请参见requirements.txt): affine , cligj , click , enum34 , numpy 。 开发还需要(参见 requi…

keil5程序编译没错误魔术棒可以识别芯片但是就是下载报错Error: Flash Download failed - “Cortex-M3“

系列文章目录 1.元件基础 2.电路设计 3.PCB设计 4.元件焊接 5.板子调试 6.程序设计 7.算法学习 8.编写exe 9.检测标准 10.项目举例 11.职业规划 文章目录 一、硬件查看是否连接错误二、软件查看芯片包&#xff0c;更新到最新版本三、Debug下载模式选择四、芯片大小选择后记…

07_矩形圆形绘制

import cv2 import numpy as np newImageInfo (600,600,3) dst np.zeros(newImageInfo,np.uint8) # 1 2 左上角 3 右下角 4 5 fill -1 >0 line w cv2.rectangle(dst,(150,380),(350,550),(150,200,100),3) # 2 center 3 r cv2.circle(dst,(250,250),(100),(0,0,255),6) …

Sunbit币昇加密交易所分析加密货币总市值回升突破2.4万亿美元

每经AI快讯&#xff0c;9月27日&#xff0c;据CoinGecko数据&#xff0c;加密货币总市值回升至2.402万亿美元&#xff0c;24小时涨幅达1.1%。 全球历史最悠久的加密货币交易所之一,总部位于旧金山,Sunbit(币昇)Sunbit已荣获美国及加拿大MSB双牌照 ▌贝莱德增持1684枚BTC&#…

考拉悠然亮相天府人工智能大会,共绘AI赋能产业升级新蓝图

9月28日&#xff0c;备受瞩目的天府人工智能大会在成都拉开帷幕。本次大会是电子科技大学联合重要学术团体、政府相关部门、知名高校、科研机构和企事业单位等共同打造的人工智能领域顶尖峰会。 考拉悠然作为电子科技大学在产学研创新应用领域的杰出企业代表&#xff0c;荣幸受…

【北京迅为】《STM32MP157开发板嵌入式开发指南》- 第十二章 Linux 权限管理

iTOP-STM32MP157开发板采用ST推出的双核cortex-A7单核cortex-M4异构处理器&#xff0c;既可用Linux、又可以用于STM32单片机开发。开发板采用核心板底板结构&#xff0c;主频650M、1G内存、8G存储&#xff0c;核心板采用工业级板对板连接器&#xff0c;高可靠&#xff0c;牢固耐…

“领航计划”取得重要阶段性成果,以科创教育推进科学教育高质量发展

党的二十大报告提出“坚持教育优先发展、科技自立自强、人才引领驱动……教育、科技、人才是全面建设社会主义现代化国家的基础性、战略性支撑”&#xff0c;从根本上体现了教育、科技、人才三者之间的关联。创新作为科技发展的根本动力&#xff0c;创新人才的培育之基在学校教…

使用C代码接入并操作PostgreSQL数据库

使用C代码接入并操作PostgreSQL数据库 引言准备工作在Debian/Ubuntu上安装在RedHat/CentOS上安装在Windows上安装编写C程序引入头文件建立连接执行SQL语句处理查询结果关闭连接完整示例编译和运行程序注意事项结论引言 PostgreSQL是一种功能强大的开源对象关系数据库系统,广泛…

TypeError: unsupported operand type(s) for +=: ‘Dense‘ and ‘str‘

tensorflow2.0报这个错误 因为你在定义模型的时候 model Sequential(SimpleRNN(3),Dense(5, activationsoftmax) )是不是感觉少了点什么&#xff0c;没加[] model Sequential([SimpleRNN(3),Dense(5, activationsoftmax)] )

TypeScript 设计模式之【访问者模式】

文章目录 访问者模式&#xff1a;灵活的文件系统扫描器访问者模式的奥秘访问者模式有什么利与弊?如何使用访问者模式来优化你的系统代码实现案例访问者模式的主要优点访问者模式的主要缺点访问者模式的适用场景总结 访问者模式&#xff1a;灵活的文件系统扫描器 假如你正在开…

智能物流行业惨淡,工程师们的“灰色地带”收入揭秘

导语 大家好&#xff0c;我是社长&#xff0c;老K。专注分享智能制造和智能仓储物流等内容。 新书《智能物流系统构成与技术实践》人俱乐部 在智能物流行业面临挑战的当下&#xff0c;工程师们除了正职收入外&#xff0c;也在探索各种途径来增加自己的“额外收益”。 这些收入&…

微信小程序环境下的相亲交友系统源码优化

随着移动互联网的迅猛发展&#xff0c;微信小程序因其便捷性和易用性成为众多开发者的选择。在这样一个背景下&#xff0c;相亲交友系统作为连接人与人的桥梁&#xff0c;也逐渐融入到了小程序的生态之中。本文旨在探讨如何在微信小程序环境中优化相亲交友系统的源码&#xff0…

云计算Openstack Cinder

OpenStack Cinder是OpenStack平台中的一个重要组件&#xff0c;它主要提供块存储服务。 一、基本概念 定义&#xff1a;Cinder是OpenStack项目中的一个模块&#xff0c;专注于为云计算环境中的虚拟机提供持久化的块存储服务。功能&#xff1a;Cinder允许用户创建和管理持久化…