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

PCL实时动态加载显示点云功能以及laslib配置

最近需要3D图形化显示点云功能,网上搜了一下发现有PCL点云库的例程。但是发现这个例程是一次性加载完所有点云然后再显示的。感觉这个不太符合项目上的需求,项目上希望能够实时的像流量计一样动态显示点云。所以就把代码改动了一下,发现效果还可以。而且网上还没有类似的例子,所以就分享下希望能帮到有需要的同学。

运行效果:

完整代码:

#include <iostream>
#include <vector>
#include <ctime>
#include <pcl/point_cloud.h>
#include <pcl/octree/octree.h>
#include <boost/thread/thread.hpp>
#include <pcl/visualization/pcl_visualizer.h>#include <stdio.h>
#include <lasreader.hpp>
#include <laswriter.hpp>
#include <iostream>#include <Windows.h>
#pragma comment(lib,"winmm.lib")using namespace std;pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);
LASreader* lasreader = nullptr;//void CALLBACK CallBackFunc(UINT uTimerID, UINT uMsg, DWORD_PTR dwUser, DWORD_PTR dw1, DWORD_PTR dw2)
//{
//	printf("CallBackFunc\n");
//}void ThreadUser() { //线程入口cout << "thread start." << endl;// 创建点云数据int i = 0;while (lasreader->read_point()) {if (!(i % 10)) {pcl::PointXYZ point;point.x = lasreader->point.get_x();point.y = lasreader->point.get_y();point.z = lasreader->point.get_z();cloud->push_back(point);}i++;}cout << "thread end." << endl;
}int main(int argc, char** argv)
{LASreadOpener lasreadopener;std::string file_name = "E:\\xyz.laz";lasreader = lasreadopener.open(file_name.c_str());if (lasreader == nullptr) {std::cerr << "File could not be opened." << std::endl;return -1;}//定时加载点云//timeSetEvent(1000, 1, CallBackFunc, (DWORD)NULL, TIME_PERIODIC);//创建子线程HANDLE h; //线程句柄h = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)ThreadUser, NULL, 1, 0); //创建子线程// 初始化点云可视化对象std::shared_ptr<pcl::visualization::PCLVisualizer>viewer(new pcl::visualization::PCLVisualizer("显示点云"));viewer->setBackgroundColor(255, 255, 255);  //设置背景颜色为白色// 对点云着色可视化设置颜色pcl::visualization::PointCloudColorHandlerCustom<pcl::PointXYZ>target_color(cloud, 0, 0, 0);ResumeThread(h);  //启动子线程// 等待直到可视化窗口关闭int cloudID = 0;while (!viewer->wasStopped()){if (cloud->size()) {viewer->addPointCloud<pcl::PointXYZ>(cloud, target_color, to_string(cloudID));//viewer->setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 1, to_string(cloudID));printf("added point sum:%d cloudId:%d\n", cloud->points.size(), cloudID);cloud->clear();cloudID++;}viewer->spinOnce(100);// 等待100毫秒后再次检查停止条件,并刷新界面//viewer->removePointCloud(to_string(cloudID - 1));}CloseHandle(h);delete lasreader; // 释放资源return (0);
}

laslib配置:

参考例子:

超详细保姆级PCL1.14.0 安装配置流程

相关文章:

  • Python项目-支持自然语言处理
  • 湖北理元理律师事务所:债务优化的法律机制与民生实践
  • 【阿里云大模型高级工程师ACP习题集】2.6.用插件扩展答疑机器人的能力边界
  • AI与IT协同的典型案例
  • C++——哈希表
  • 【C++】类和对象(4)
  • 线段树底层逻辑探讨-P3373-P1438
  • python 线程池顺序执行
  • 夜莺监控V8(Nightingale)二进制部署教程(保姆级)
  • BZOJ.疯狂的馒头
  • 单片机-89C51部分:7、中断
  • 无刷空心杯电机及机器人灵巧手的技术解析与发展趋势
  • ECMAScript 版本
  • 意法半导体(ST)重磅收购Deeplite,边缘AI版图再扩张
  • LangChain4j +DeepSeek大模型应用开发——3 人工智能服务 AIService
  • 制药领域的技术革命:Profinet转CanOpen网关大放异彩
  • alibaba的EasyExcel导出合并单元格,超简单
  • 深度相机(一)——深度相机模型及用途介绍
  • 天梯——算式拆分
  • 在g2o图优化框架中,顶点(Vertex)和边(Edge)的定义与功能的区别
  • 被算法重塑的世界,人与技术如何和谐共处
  • 六朝文物草连空——丹阳句容南朝石刻考察纪
  • 解码人格拼图:探索心理健康的多维视角
  • 石磊当选河北秦皇岛市市长
  • 王毅同伊朗外长阿拉格齐会谈
  • 上海市闵行区原二级巡视员琚汉铮接受纪律审查和监察调查