当前位置: 首页 > news >正文

用C++编写一个PCL可视化交互操作的简单范例

我注意到之前的代码尝试在Python环境中运行C++代码,导致语法错误。以下是修正后的完整C++代码示例,使用PCL实现可视化交互操作:

#include <pcl/point_types.h>
#include <pcl/point_cloud.h>
#include <pcl/visualization/pcl_visualizer.h>
#include <pcl/common/transforms.h>
#include <Eigen/Dense>
#include <iostream>// 点类型定义
using PointT = pcl::PointXYZ;
using PointCloudT = pcl::PointCloud<PointT>;int main()
{// 创建共享数据结构PointCloudT::Ptr cloud(new PointCloudT);PointCloudT::Ptr transformed_cloud(new PointCloudT);Eigen::Matrix4f transform = Eigen::Matrix4f::Identity();pcl::visualization::PCLVisualizer::Ptr viewer;// 创建立方体点云for (float x = -0.5f; x <= 0.5f; x += 0.1f) {for (float y = -0.5f; y <= 0.5f; y += 0.1f) {for (float z = -0.5f; z <= 0.5f; z += 0.1f) {cloud->push_back(PointT(x, y, z));}}}// 初始化可视化窗口viewer.reset(new pcl::visualization::PCLVisualizer("PCL Interactive Visualization"));viewer->setBackgroundColor(0, 0, 0);viewer->addCoordinateSystem(0.3);viewer->initCameraParameters();// 添加原始点云viewer->addPointCloud(cloud, "original_cloud");viewer->setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_COLOR, 0.8, 0.1, 0.1, "original_cloud");// 添加变换后的点云pcl::transformPointCloud(*cloud, *transformed_cloud, transform);viewer->addPointCloud(transformed_cloud, "transformed_cloud");viewer->setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_COLOR, 0.1, 0.8, 0.1, "transformed_cloud");// 添加键盘事件回调viewer->registerKeyboardCallback([&](const pcl::visualization::KeyboardEvent& event) -> void {if (event.getKeySym() == "Left" || event.getKeySym() == "Right" ||event.getKeySym() == "Up" || event.getKeySym() == "Down") {// 根据按键更新变换矩阵if (event.getKeySym() == "Left") {transform(0,3) -= 0.1f;} else if (event.getKeySym() == "Right") {transform(0,3) += 0.1f;} else if (event.getKeySym() == "Up") {transform(1,3) += 0.1f;} else if (event.getKeySym() == "Down") {transform(1,3) -= 0.1f;}// 应用变换pcl::transformPointCloud(*cloud, *transformed_cloud, transform);// 更新可视化viewer->updatePointCloud(transformed_cloud, "transformed_cloud");viewer->resetStoppedFlag();}});// 添加文本信息viewer->addText("Use arrow keys to move the green cube", 10, 10, "info_text");// 主循环while (!viewer->wasStopped()) {viewer->spinOnce(100);}return 0;
}

编译运行说明:

  1. 保存代码为pcl_interactive.cpp
  2. 使用以下命令编译:
g++ -std=c++11 pcl_interactive.cpp -o pcl_interactive \-lpcl_common -lpcl_visualization -lEigen3
  1. 运行程序:
./pcl_interactive

功能说明:

  1. 创建一个立方体点云作为测试数据
  2. 原始点云显示为红色,变换后点云显示为绿色
  3. 使用键盘方向键(←→↑↓)可以平移绿色立方体
  4. 实时显示变换后的点云位置

这个程序展示了如何使用PCL进行基本的可视化交互操作,用户可以通过键盘控制点云的移动。

http://www.dtcms.com/a/577729.html

相关文章:

  • 建设部网站官工程质量手册农村自建房设计图120平方二层
  • 南京网站推广费用网站宣传文案有哪些
  • 安防监控领域中常用设备AI枪机摄像机
  • matlab 命令pdist, pdist2
  • 有效的括号详解 | C语言用动态数组实现栈解决
  • 2024年上半年试题一:论大数据lambda架构
  • 北斗GNSS位移监测是什么?主要有哪几种应用?
  • 【芯片设计中的时序约束:Multicycle Path与False Path深度解析】
  • 学院网站建设需求分析调研表wordpress做dropping
  • centos7利docker compose 快速部署 Elasticsearch + Kibana
  • 网站流量建设设计广告设计
  • 个体工商户可以搞网站建设免费人脉推广
  • 谷歌浏览器Google Chrome离线安装包
  • Profinet IO从站数据 转IEC104项目案例
  • 嵌入式学习笔记 - SH79F6441芯片之8051的寻址空间,位寻址与字节地址寻址
  • 项目推荐:BettaFish (微舆) - 当多智能体遇上“论坛”协作机制
  • 跑通Visual-RFT报错解决记录
  • 学习网站二次开发如何自己设置网站
  • 自定义配置打印参数,进行打印功能
  • 免费看电视的网站有哪些深圳响应式网站价格
  • 如何给网站划分栏目利用html5 监控网站性能
  • MySQL原生账号权限管理
  • C#中关于ContextMenuStrip批量添加Item的问题
  • 从线程基础到线程池
  • Android selinux policy单独编译与调试
  • XML介绍
  • 营销推广运营 网站wordpress关闭主循环
  • Linux MTD系统深度解析:从原理到实践
  • css第二天
  • Spring Boot 3.2 高性能架构实战:虚拟线程、原生镜像与响应式编程全解析