资源简介
使用c++与pcl点云库实现点云数据按照高程设置颜色进行渲染,里面包括pcl1.8属性表,点云数据与源码,如果已经配置pcl点云库,下载后可以运行。没有配置pcl点云库没有任何影响,主要是按高程对点云设置r,g,b颜色值而已。

代码片段和文件信息
#include
#include
#include //文件输入输出
#include //点类型相关定义
#include
using namespace std;
typedef pcl::PointXYZRGBA PointT;
typedef pcl::PointCloud PointCloudT;
void displayCloudAsHeight(PointCloudT& cloud)
{
//红绿蓝颜色设置
int topColor[3];
int midColor[3];
int bottomColor[3];
topColor[0] = 255; topColor[1] = 0; topColor[2] = 0;
midColor[0] = 0; midColor[1] = 255; midColor[2] = 0;
bottomColor[0] = 0; bottomColor[1] = 0; bottomColor[2] = 255;
int r1 = midColor[0] - bottomColor[0];
int g1 = midColor[1] - bottomColor[1];
int b1 = midColor[2] - bottomColor[2];
int r2 = topColor[0] - midColor[0];
int g2 = topColor[1] - midColor[1];
int b2 = topColor[2] - midColor[2];
float maxz minz midz;
maxz = -FLT_MAX;
minz = FLT_MAX;
//获取当前点云高程极值
for (size_t i = 0; i < cloud.points.size(); ++i)
{
if (cloud.points[i].z > maxz) maxz = cloud.points[i].z;
if (cloud.points[i].z < minz) minz = cloud.points[i].z;
}
midz = (maxz + minz) / 2;
for (size_t i = 0; i < cloud.points.size(); ++i)
{
if (cloud.points[i].z < midz){
float k1 = (cloud.points[i].z - minz) / (midz - minz);
cloud.points[i].r = bottomColor[0] + r1 * k1;
cloud.points[i].g = bottomColor[1] + g1 * k1;
cloud.points[i].b = bottomColor[2] + b1 * k1;
}
else{
float k2 = (cloud.points[i].z - minz) / (maxz - midz);
cloud.points[i].r = midColor[0] + r2 * k2;
cloud.points[i].g = midColor[1] + g2 * k2;
cloud.points[i].b = midColor[2] + b2 * k2;
}
}
}
int main()
{
//1.读取点云
PointCloudT::Ptr cloud(new PointCloudT);
if (pcl::io::loadPCDFile(“CSite1_orig.pcd“ *cloud) == -1)
{
PCL_ERROR(“Cloudn‘t read file!“);
return -1;
}
cout << “读取点个数: “ << cloud->points.size() << endl;
//2.按高程设置颜色
displayCloudAsHeight(*cloud);
//3.显示点云
pcl::visualization::PCLVisualizer viewer(“cloud viewer“);
viewer.addPointCloud(cloud “sample“);
while (!viewer.wasStopped())
{
viewer.spinOnce();
}
system(“pause“);
return 0;
}
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 13664281 2019-05-12 15:22 点云按高程渲染\CSite1_orig.pcd
文件 2197 2019-05-12 15:29 点云按高程渲染\main.cpp
文件 5644 2019-04-18 19:38 点云按高程渲染\PCLRelease.props
目录 0 2019-05-12 15:42 点云按高程渲染
----------- --------- ---------- ----- ----
13672122 4
- 上一篇:C语言经典排序方法及动图演示
- 下一篇:霍夫找圆,找线的程序
相关资源
- 国际象棋的qt源代码
- C++中头文件与源文件的作用详解
- C++多线程网络编程Socket
- VC++ 多线程文件读写操作
- 利用C++哈希表的方法实现电话号码查
- 移木块游戏,可以自编自玩,vc6.0编写
- C++纯文字DOS超小RPG游戏
- VC++MFC小游戏实例教程(实例)+MFC类库
- 连铸温度场计算程序(C++)
- 6自由度机器人运动学正反解C++程序
- Em算法(使用C++编写)
- libstdc++-4.4.7-4.el6.i686.rpm
- VC++实现CMD命令执行与获得返回信息
- 白话C++(全)
- C++标准库第1、2
- 大数类c++大数类
- C++语言编写串口调试助手
- c++素数筛选法
- C++ mqtt 用法
- 商品库存管理系统 C++ MFC
- c++ 多功能计算器
- C++17 In Detail
- 嵌入式QtC++编程课件
- 颜色识别形状识别STM103嵌入式代码
- c++ 邮件多附件群发
- c++ 透明代理(hookproxy)
- mfc 调用redis
- FTP客户端源码(c++)
- c++ 画图(14Qt-XPS)
- c++多边形交并差运算
评论
共有 条评论