[PCL] PCLVisualizer可视化的应用

news2024/9/29 13:26:15

[PCL] PCLVisualizer可视化的应用

通常情况下 PCL的可视化 是非常方便. 但是

#include<pcl/io/io.h>
#include<pcl/io/pcd_io.h>
#include<pcl/io/ply_io.h>
#include<pcl/visualization/cloud_viewer.h>

#include<iostream>
#include<thread>

int user_data;
 
void viewerOneOff(pcl::visualization::PCLVisualizer& viewer) {
	viewer.setBackgroundColor(1.0, 0.5, 1.0);   //设置背景颜色
}
 
int main() {

  /// # windows 下 随意
	pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);

	char strfilepath[256] = "../rabbit.pcd";
	if (-1 == pcl::io::loadPCDFile(strfilepath, *cloud)) {
		std::cout << "error input!" << std::endl;
		return -1;
	}

	cout << cloud->points.size() << endl;
	pcl::visualization::CloudViewer viewer("Cloud Viewer");   //创建viewer对象

	viewer.showCloud(cloud);
	viewer.runOnVisualizationThreadOnce(viewerOneOff);
	system("pause");
	return 0;
}

这样的代码 在Windows 上运行是没有问题的,但是在 mac. 就不行了.因为 mac 严格禁止在子线程里面进行任何UI相关的操作

35947
*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'NSWindow should only be instantiated on the main thread!'
*** First throw call stack:
(
	0   CoreFoundation                      0x000000018baeeccc __exceptionPreprocess + 176
	1   libobjc.A.dylib                     0x000000018b5d6788 objc_exception_throw + 60
	2   CoreFoundation                      0x000000018bb13c48 _CFBundleGetValueForInfoKey + 0
	3   AppKit                              0x000000018f2e1294 -[NSWindow _initContent:styleMask:backing:defer:contentView:] + 188
	4   AppKit                              0x000000018f2e11cc -[NSWindow initWithContentRect:styleMask:backing:defer:] + 48
	5   libvtkRenderingOpenGL2-9.3.9.3.dyli 0x000000010412e688 _ZN20vtkCocoaRenderWindow13CreateAWindowEv + 1252
	6   libvtkRenderingOpenGL2-9.3.9.3.dyli 0x000000010412ec18 _ZN20vtkCocoaRenderWindow5StartEv + 40
	7   libvtkRenderingUI-9.3.9.3.dylib     0x0000000102a11680 _ZN30vtkCocoaRenderWindowInteractor10InitializeEv + 64
	8   libpcl_visualization.1.14.0.dylib   0x000000010284cd74 _ZN3pcl13visualization13PCLVisualizer16createInteractorEv + 228
	9   libpcl_visualization.1.14.0.dylib   0x000000010284c8f0 _ZN3pcl13visualization13PCLVisualizerC2ERKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEb + 440
	10  libpcl_visualization.1.14.0.dylib   0x000000010286eda4 _ZNSt3__120__shared_ptr_emplaceIN3pcl13visualization13PCLVisualizerENS_9allocatorIS3_EEEC2B7v160006IJRNS_12basic_stringIcNS_11char_traitsIcEENS4_IcEEEEbEEES5_DpOT_ + 44
	11  libpcl_visualization.1.14.0.dylib   0x000000010286ed4c _ZNSt3__115allocate_sharedB7v160006IN3pcl13visualization13PCLVisualizerENS_9allocatorIS3_EEJRNS_12basic_stringIcNS_11char_traitsIcEENS4_IcEEEEbEvEENS_10shared_ptrIT_EERKT0_DpOT1_ + 52
	12  libpcl_visualization.1.14.0.dylib   0x000000010286e9a0 _ZN3pcl13visualization11CloudViewer16CloudViewer_implclEv + 64
	13  libpcl_visualization.1.14.0.dylib   0x000000010286f00c _ZNSt3__114__thread_proxyB7v160006INS_5tupleIJNS_10unique_ptrINS_15__thread_structENS_14default_deleteIS3_EEEEMN3pcl13visualization11CloudViewer16CloudViewer_implEFvvEPSA_EEEEEPvSF_ + 72
	14  libsystem_pthread.dylib             0x000000018b99af94 _pthread_start + 136
	15  libsystem_pthread.dylib             0x000000018b995d34 thread_start + 8
)
libc++abi: terminating due to uncaught exception of type NSException

进程已结束,退出代码为 134 (interrupted by signal 6:SIGABRT)

后来才发现 PCL 里面 有关于这个的可视化操作 就是PCLVisualizer, 稍微修改一下代码


#include<pcl/io/io.h>
#include<pcl/io/pcd_io.h>
#include<pcl/io/ply_io.h>
#include<pcl/visualization/cloud_viewer.h>

#include<iostream>
#include<thread>

int user_data;
 
void viewerOneOff(pcl::visualization::PCLVisualizer& viewer) {
	viewer.setBackgroundColor(1.0, 0.5, 1.0);   //设置背景颜色
}
 
int main() {
char strfilepath[256] = "../rabbit.pcd";

#if 0
  /// # windows 下 随意
	pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);

	if (-1 == pcl::io::loadPCDFile(strfilepath, *cloud)) {
		cout << "error input!" << endl;
		return -1;
	}

	cout << cloud->points.size() << endl;
	pcl::visualization::CloudViewer viewer("Cloud Viewer");   //创建viewer对象

	viewer.showCloud(cloud);
	viewer.runOnVisualizationThreadOnce(viewerOneOff);
	system("pause");
#else
    /// mac下仍然可以运行
    // 加载点云
    pcl::PointCloud<pcl::PointXYZ>::Ptr cloud (new pcl::PointCloud<pcl::PointXYZ>);

    if (pcl::io::loadPCDFile<pcl::PointXYZ> (strfilepath, *cloud) == -1) {
        PCL_ERROR ("Couldn't read file test_pcd.pcd \n");
        return (-1);
    }
    std::cout << "Loaded "
              << cloud->width * cloud->height
              << " data points from test_pcd.pcd with the following fields: "
              << std::endl;

    // 创建PCLVisualizer对象
    pcl::visualization::PCLVisualizer::Ptr viewer (new pcl::visualization::PCLVisualizer ("3D Viewer"));

    // 设置背景颜色为黑色(也可以选择其他颜色)
    viewer->setBackgroundColor (0, 0, 0);

    // 添加点云数据
    viewer->addPointCloud<pcl::PointXYZ> (cloud, "sample cloud");

    // 设置点云的渲染属性(这里我们设置点的大小为1)
    viewer->setPointCloudRenderingProperties (pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 1, "sample cloud");

    // 添加坐标轴(可选)
    viewer->addCoordinateSystem (1.0);

    // 设置相机的初始位置
    viewer->initCameraParameters ();

    // 主循环
    while (!viewer->wasStopped ()) {
        viewer->spinOnce (100);  // 100毫秒刷新一次
        std::this_thread::sleep_for(std::chrono::milliseconds(100));
    }
#endif

    return 0;
}

运行效果如下:

请添加图片描述
发现运行是正常的

然后就可以相关了解一下 PCLVisualizer 这个模块, 下面是PCL官方的使用

Point Cloud Library

PCL教程-PCLVisualizer可视化类的使用

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

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

相关文章

【函数修改的重要问题】想要增加C++函数返回值,选择结构体?OR 额外参数?

作为一个程序员&#xff0c;我们经常会遇到这样的情况&#xff1a; 别人写的C项目&#xff0c;需要我们来进行 ”修改&#xff0c;或者增加功能“。 举个例子 我们需要对于一个已有的C函数&#xff0c;增加它的返回值信息&#xff0c;通常有两条路可走&#xff1a; 用结构体…

只用一部手机,为你的吉利车机安装第三方软件(支持大部分车型)

&#x1f4a1; 文中使用的方法为DNS重定向&#xff0c;需要你具备一定的动手能力&#xff0c;否则将无法达到最终目的。 &#x1f4a1; 阅读本文&#xff0c;视为你有一定电脑基础&#xff0c;难以理解时&#xff0c;请寻求百度帮助&#xff0c;百度就是最好的老师&#xff01;…

“大模型+机器人”的现状和未来,重磅综述报告来了!

基础模型(Foundation Models)是近年来人工智能领域的重要突破&#xff0c;在自然语言处理和计算机视觉等领域取得了显著成果。将基础模型引入机器人学&#xff0c;有望从感知、决策和控制等方面提升机器人系统的性能&#xff0c;推动机器人学的发展。由斯坦福大学、普林斯顿大学…

红队笔记8-CTF5打靶流程-CMS漏洞-多用户信息泄露(vulnhub)

目录 开头: 1.主机发现和端口扫描&#xff1a; 2.80端口-NanoCMS哈希密码信息泄露-后台getshell 3.提权-用户过多信息泄露 4.总结&#xff1a; 开头: 学习的视频是哔哩哔哩红队笔记&#xff1a; 「红队笔记」靶机精讲&#xff1a;LAMPSecurityCTF5 - 标准攻击链&#xff…

【Java程序设计】【C00392】基于(JavaWeb)Springboot的校园生活服务平台(有论文)

基于&#xff08;JavaWeb&#xff09;Springboot的校园生活服务平台&#xff08;有论文&#xff09; 项目简介项目获取开发环境项目技术运行截图 博主介绍&#xff1a;java高级开发&#xff0c;从事互联网行业六年&#xff0c;已经做了六年的毕业设计程序开发&#xff0c;开发过…

有趣的css - 多弧形加载动画

大家好&#xff0c;我是 Just&#xff0c;这里是「设计师工作日常」&#xff0c;今天分享的是用纯css实现多双弧线加载动画。 《有趣的css》系列最新实例通过公众号「设计师工作日常」发布。 目录 整体效果核心代码html 代码css 部分代码 完整代码如下html 页面css 样式页面渲…

MySQL数据库基础--约束

约束 约束是作用于表中字段上的规则&#xff0c;用于限制在表中的数据 目的&#xff1a;保证数据库中数据的正确&#xff0c;有效性和完成性。 分类&#xff1a; 注意&#xff1a;约束是作用于表中字段上的&#xff0c;可以在创建表/修改表的时候哦添加约束 外键约束 外键用…

心理治疗聊天机器人的调查

摘要 这项调查旨在调查、分析和比较现有聊天机器人在心理治疗中的可行性和缺陷。调查指出了未来心理治疗聊天机器人所需的一系列任务。我们在公共数据库中检索了约1200篇相关文献&#xff0c;并选择了五种典型的和最先进的心理治疗聊天机器人。大多数最先进的心理治疗聊天机器人…

AndroidStudio中一些实用插件

1.RainbowBrackets插件为圆括号、方括号和花括号内的代码添加了漂亮的彩虹色 2.CodeGlance类似于Sublime或Xcode&#xff0c;CodeGlance插件在编辑器中嵌入了代码迷你图。滚动条也有所增大。在CodeGlance预览文件的代码模式下&#xff0c;用户可以快速导航到目标处。 3.ADBWifi…

机器人是怎么计时的(通用定时器 - 时基单元)

目录 一&#xff0c;引言 二&#xff0c;机器人的“大脑” 三&#xff0c;时基单元介绍 1&#xff0c;定时器框图 2&#xff0c;时基单元 &#xff08;1&#xff09;预分频器 &#xff08;2&#xff09;CNT计数器 &#xff08;3&#xff09;自动重装载寄存器 四&#…

如何在vue中使用echarts,与jquery中有啥不同。

一、vue中使用echarts的步骤 在 Vue 中使用 ECharts 可以按照以下步骤进行&#xff1a; 安装 ECharts&#xff1a;使用 npm 或 yarn 安装 ECharts&#xff1a; npm install echarts 在 Vue 组件中引入 ECharts&#xff1a; import echarts from echarts 在 Vue 组件的 mou…

BUUCTF-Misc15

[SWPU2019]我有一只马里奥1 1.打开附件 是一个可执行文件 2.执行 双击可执行文件生成一个1.txt的文件 文件提示ntfs,需要一个工具ntfsStreamsEditor 3.ntfsStreamsEditor “ntfsStreamsEditor” 是一个用于管理 Windows 操作系统中 NTFS&#xff08;新技术文件系统&#xff…

node的安装

官网下载&#xff08;建议使用预编译包安装&#xff09; 地址&#xff08;https://nodejs.org/en/download/prebuilt-binaries&#xff09; 解压包&#xff0c;并将 bin下面的 node npm npx加入到环境变量中或者建立软连接 ln -s 安装位置/bin/node PATH下面的路径 npm配置…

Vivado工程收敛之报告分析大全

目录 一、前言 二、分析报告 2.1 时钟分析 2.1.1 时钟报告 2.1.2 时钟网络报告 2.1.3 时钟利用率报告 2.1.4 跨时钟域报告 2.2 时序分析 2.3 约束分析 2.4 资源分析 2.5 逻辑级数分析 2.6 扇出分析 2.7 进位链分析 2.8 控制集分析 2.9 复杂度分析 2.10 pipelin…

运筹学基础(一)求解线性规划的单纯形法详解

文章目录 前言线性规划的标准形式一个例子理解单纯形法1. 将线性规划转化为标准形式2. 找到一个初始可行解3. 旋转操作4. 重复旋转 一些badcase退化初始解不是可行解以及无解的情况找不到有限制条件的替入变量——无界解 时间复杂度参考资料 前言 大学的《运筹学》课程中&…

【分享】Word文档的5个隐藏功能

编辑Word文档的过程中&#xff0c;有时候我们需要隐藏一些格式&#xff0c;或者重要信息&#xff0c;今天小编来分享4个Word文档的隐藏功能&#xff0c;记得收藏哦&#xff01; 功能1&#xff1a;隐藏文本内容 对于不想被他人看到的文本内容&#xff0c;可以设置隐藏起来。 首…

备份SQLserver数据库到本地位置

怎么选择合适的数据库备份方案&#xff1f; 有人可能会说SSMS&#xff0c;确实&#xff0c;SSMS作为一个微软官方提供的SQLserver数据库管理工具&#xff0c;是可以帮助我们完成对数据库的备份还原任务的&#xff0c;但是它也有一些局限性&#xff0c;比如不能进行批量化的备份…

区块链技术与大数据结合的商业模式探索

hello宝子们...我们是艾斯视觉擅长ui设计和前端开发10年经验&#xff01;希望我的分享能帮助到您&#xff01;如需帮助可以评论关注私信我们一起探讨&#xff01;致敬感谢感恩&#xff01; 随着区块链技术和大数据技术的不断发展&#xff0c;两者的结合为企业带来了新的商业模式…

大话设计模式之装饰模式

装饰模式&#xff08;Decorator Pattern&#xff09;是一种结构型设计模式&#xff0c;它允许向现有对象动态地添加新功能&#xff0c;同时又不改变其结构。装饰模式通过将对象放入包装器中来实现&#xff0c;在包装器中可以动态地添加功能。 在装饰模式中&#xff0c;通常会有…