[C++][pcl]pcl安装后测试代码3

news2024/11/18 8:23:55

测试环境:

vs2019

pcl==1.12.1

代码:

#include<iostream>
#include <thread>

#include <pcl/common/common_headers.h>
#include <pcl/features/normal_3d.h>
#include <pcl/io/pcd_io.h>
#include <pcl/visualization/pcl_visualizer.h>
#include <pcl/console/parse.h>
#include <boost/current_function.hpp>

using namespace pcl;

int main(int argc, char** argv)
{
    // 1. 创建和设置可视化窗口
    std::string strWinName = "3D Viewer", strWinTitle = "Point Cloud Viewer";
    int scnWidth = 1024, scnHeight = 800;
    visualization::PCLVisualizer::Ptr viewer(new visualization::PCLVisualizer(strWinName));
    viewer->setWindowName(strWinTitle);
    viewer->initCameraParameters(); // set camera before set size
    viewer->setPosition(0, 0);
    viewer->setSize(scnWidth, scnHeight);
    viewer->setShowFPS(false);

    // viewports
    int vMenu(0), v1(0), v2(0);
    viewer->createViewPort(0.0, 0.0, 1.0, 0.2, vMenu); // used as interface
    viewer->createViewPort(0.0, 0.2, 0.5, 1.0, v1);
    viewer->createViewPort(0.5, 0.2, 1.0, 1.0, v2);
    // Background Color
    viewer->setBackgroundColor(0.8, 0.8, 0.8, vMenu); // light grey
    viewer->setBackgroundColor(0.1, 0.1, 0.1, v1); // dark grey
    viewer->setBackgroundColor(0.2, 0.2, 0.2, v2); // dark grey

    // cameras
    viewer->createViewPortCamera(v1);
    viewer->createViewPortCamera(v2);
    double pos[3] = { 6,0,0 }; // camera at X-axis
    double foc[3] = { 0,0,0 }; // viewpoint at orgin
    double up[3] = { 0,0,1 };  // up is Z-axis
    viewer->setCameraPosition(pos[0], pos[1], pos[2], foc[0], foc[1], foc[2], up[0], up[1], up[2]);
    // check cameras
    //std::vector<visualization::Camera> cams;
    //viewer->getCameras(cams);

    // coordinates
    viewer->addCoordinateSystem(1.0, "ref_v1", v1);
    viewer->addCoordinateSystem(1.0, "ref_v2", v2);

    // 2. 创建点云数据和添加点云。
    PointCloud<PointXYZ>::Ptr cloud_ptr(new PointCloud<PointXYZ>);
    PointCloud<PointXYZRGB>::Ptr cloud_color_ptr(new PointCloud<PointXYZRGB>);
    std::uint8_t r(255), g(15), b(15);
    for (float z = -1.0; z <= 1.0; z += 0.05)
    {
        for (float angle = 0.0; angle <= 360.0; angle += 5.0)
        {
            pcl::PointXYZ basic_point;
            basic_point.x = 0.5 * std::cos(pcl::deg2rad(angle));
            basic_point.y = sinf(pcl::deg2rad(angle));
            basic_point.z = z;
            cloud_ptr->points.push_back(basic_point); // 将每个点输入点云

            pcl::PointXYZRGB point;
            point.x = basic_point.x;
            point.y = basic_point.y;
            point.z = basic_point.z;
            std::uint32_t rgb = (static_cast<std::uint32_t>(r) << 16 |
                static_cast<std::uint32_t>(g) << 8 | static_cast<std::uint32_t>(b));
            point.rgb = *reinterpret_cast<float*>(&rgb);
            cloud_color_ptr->points.push_back(point); // 将每个点输入点云
        }
        if (z < 0.0)
        {
            r -= 12; // light red at -|z| 
            g += 12; // light green at 0
        }
        else
        {
            g -= 12; // light green at 0
            b += 12; // light blue at +|z|
        }
    }
    cloud_ptr->width = cloud_ptr->size(); // 无规则点云的width为点数
    cloud_ptr->height = 1;
    cloud_color_ptr->width = cloud_color_ptr->size(); // 无规则点云的width为点数
    cloud_color_ptr->height = 1;

    bool ret = viewer->addPointCloud<PointXYZ>(cloud_ptr, "cloud1"); // 白色点云
    if (ret)
    {
        double clrR = 0, clrG = 0, clrB = 1, szPoint = 3;
        viewer->setPointCloudRenderingProperties(visualization::PCL_VISUALIZER_COLOR, clrR, clrG, clrB, "cloud1"); // 设置点云颜色
        viewer->setPointCloudRenderingProperties(visualization::PCL_VISUALIZER_POINT_SIZE, szPoint, "cloud1"); // 设置大小
    }
    else
        viewer->updatePointCloud<PointXYZ>(cloud_ptr, "cloud1");

    //3. 进入主循环
    while (!viewer->wasStopped())
    {
        // 如果点云不断更新,在这里添加点云
        // 如果需要改变视角,在这里设置相机
        viewer->spinOnce(100, true);
        Sleep(100);
    }
}

演示结果:

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

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

相关文章

Debian离线安装mysql

PS:虽然已经分享了很多安装各种环境订的教程&#xff0c;但是每个客户的环境不一样&#xff0c;那就得重新来一次&#xff0c;其实都是大同小异的&#xff0c;但是里面其实也是存在不少坑的&#xff0c;今天我们就来安装一个新的东西&#xff0c;Debian 11离线安装mysql,为什么…

FinClip 支持创建 H5应用类小程序;PC 终端 优化升级

FinClip 的使命是使您能够通过小程序解决关键业务流程挑战&#xff0c;并完成数字化转型。不妨让我们看看本月产品与市场发布亮点&#xff0c;是否有助于您实现目标。 产品方面的相关动向&#x1f447;&#x1f447;&#x1f447; FinClip 支持创建 H5应用类小程序 近期我们…

微服务01-基本介绍+注册中心EureKa

基本介绍 服务集群&#xff1a;一个请求由多个服务完成&#xff0c;服务接口暴露&#xff0c;以便于相互调用&#xff1b; 注册中心&#xff1a;每个服务的状态&#xff0c;需要进行维护&#xff0c;我们可以在注册中心进行监控维护服务&#xff1b; 配置中心&#xff1a;这些…

机器学习笔记之最优化理论与方法(六)无约束优化问题——最优性条件

机器学习笔记之最优化理论与方法——无约束优化问题[最优性条件] 引言无约束优化问题无约束优化问题最优解的定义 无约束优化问题的最优性条件无约束优化问题的充要条件无约束优化问题的必要条件无约束优化问题的充分条件 引言 本节将介绍无约束优化问题&#xff0c;主要介绍无…

周赛361(模拟、枚举、记忆化搜索、统计子数组数目(前缀和+哈希)、LCA应用题)

文章目录 周赛361[2843. 统计对称整数的数目](https://leetcode.cn/problems/count-symmetric-integers/)模拟 [2844. 生成特殊数字的最少操作](https://leetcode.cn/problems/minimum-operations-to-make-a-special-number/)记忆化搜索枚举 [2845. 统计趣味子数组的数目](http…

Servlet属性、监听者和会话

没有servlet能单独存在。在当前的现代Web应用中&#xff0c;许多组件都是在一起协作共同完成一个目标。怎么让这些组件共享信息&#xff1f;如何隐藏信息&#xff1f;怎样让信息做到线程安全&#xff1f; 1 属性和监听者 1.1 初始化 容器初始化一个servlet时&#xff0c;会为…

Text-to-SQL小白入门(四)指令进化大模型WizardLM

摘要 本文主要对大模型WizardLM的基本信息进行了简单介绍&#xff0c;展示了WizardLM取得的优秀性能&#xff0c;分析了论文的核心——指令进化方法。 论文概述 基本信息 英文标题&#xff1a;WizardLM: Empowering Large Language Models to Follow Complex Instructions中…

【实践篇】Redis使用规范清单详解

Redis 使用规范清单详解 文章目录 Redis 使用规范清单详解0. 前言参考资料 1. 键值对使用规范1. Key的命名规范2. 避免使用 bigkey2.1. "bigkey"的导致的问题2.2 避免"bigkey"问题解决方法2.2 1. 数据分片2.2.2. 数据压缩 3. 使用高效序列化方法和压缩方法…

jmeter 计数器Counter

计数器可以用于生成动态的数值或字符串&#xff0c;以模拟不同的用户或数据。 计数器通常与用户线程组结合使用&#xff0c;以生成不同的变量值并在测试中应用。以下是计数器的几个常用属性&#xff1a; 变量前缀&#xff08;Variable Name Prefix&#xff09;&#xff1a;定义…

C语言中结构体和位段的一些知识

一、结构体 struct stu {char name[20];//20//对齐数为8int age;//4//两个数中最大对齐数为8&#xff0c;而24又是8的整数倍 }; int main () {printf("%d\n", sizeof(struct stu));//只有vs中有对齐数为8&#xff0c;gcc没有对齐数&#xff0c;对齐数为成员变量自…

【MySQL】MySQL8.0安装教程

下载 MySQL官网下载安装包 安装 1、双击安装程序开始安装 2、选择安装类型 选Server only&#xff08;只安装mysql&#xff09;&#xff0c;然后点击“next”。 3、检测需要的安装&#xff0c; 直接点击Execute开始安装 4、点击next 5、点击next 6、next 7、密码验证方式&a…

EXCEL 中find,if and,if or

接上一篇sql中find函数的作用&#xff0c;由于工作需求是用帆软做报表&#xff0c;他的一些代码不仅有js&#xff0c;sql中的还有一些excel的相关知识&#xff0c;故作整理。 FIND() excel中的find原理和sql中相似&#xff0c;具体可查看 SQL函数 $FIND_Yangshiwei....的博客…

SAP 邮件发送配置

SICF激活服务SCOT邮箱发送配置 具体步骤如下&#xff1a; 1. SICF激活服务 进入事务码&#xff1a; SCIF 选中SAPconnect,右击选中激活SMT机&#xff0c;进行激活 2. SCOT配置邮箱发送设置 进入事务码&#xff1a; SCOT 点开业务通信管理-》设置-》SMTP连接-》出站信息-》…

vscode新建vue3文件模板

输入快捷新建的名字 enter 确认后在文件中输入以下内容 {// Place your snippets for vue here. Each snippet is defined under a snippet name and has a prefix, body and// description. The prefix is what is used to trigger the snippet and the body will be expand…

【计算机网络】 静态库与动态库

文章目录 静态库实践使用方法总结 动态库实践使用方法总结 静态库与动态库的优缺点静态库优点缺点 动态库缺点优点 库有两种&#xff1a;静态库&#xff08;.a、.lib&#xff09;和动态库&#xff08;.so、.dll&#xff09;。所谓静态、动态是指链接。静态库是将整个库文件都拷…

Github 下载指定文件夹(git sparse-checkout)

比如要下载这里的 data_utils 步骤 1、新建空文件夹&#xff0c;并进入新建的空文件夹。 2、git init 初始化 3、git remote add origin 添加远程仓库 4、git config core.sparsecheckout true 允许稀疏检出 5、git sparse-checkout set 设置需要拉取的文件夹&#xff08;可…

Lite transformer

图片以及思想来源请参考论文 Lite Transformer with Long-Short Range Attention 瓶颈结构&#xff08;bottleneck&#xff09;是否真的有效 注意力机制被广泛应用在诸多领域&#xff0c;包括自然语言处理&#xff0c;图像处理和视频处理。它通过计算所有输入元素的点积来建模…

idea 无法识别maven的解决

问题描述 从git拉取代码或者修改文件夹以后&#xff0c;整个项目所有依赖爆红无法通过修改或者重新加载maven解决版本为idea 2021 问题定位 maven的版本太高&#xff0c;而idea的般本太低&#xff0c;导致识别的时候稳定性差 解决 使用idea原生的maven版本 选择已捆绑的m…

Tribon二次开发-tbwautodraw

在Assembly模块中,通过设置和生成,可以在手动的基础上自动生成组立装配图。 1、设置视向,根据组立的具体情况选择,一般横向结构,是向船首看,纵向结构向左舷看,水平结构向下看。 2、在组立节点上右键,选项“Generate Assembly Drawing…” 确保图框A4L_…

无涯教程-JavaScript - DAYS函数

描述 DAYS函数返回两个日期之间的天数。 语法 DAYS (end_date, start_date)争论 Argument描述Required/OptionalEnd_dateStart_date and End_date are the two dates between which you want to know the number of days.RequiredStart_dateStart_date and End_date are th…