资源简介
使用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语言经典排序方法及动图演示
- 下一篇:霍夫找圆,找线的程序
相关资源
- 霍夫找圆,找线的程序
- 钱能C++程序设计教程第二版课后答案
- DX9.0小游戏C++代码
- socket编程聊天室C++
- 基于C++用用CBC与ECB模式的DES加解密
- C++多边形有效边填充算法
- MD5算法C++实现
- 傅里叶变换和傅里叶逆变换的C++代码
- 课程设计---c++代码相似度计算
- C++课件PDF
- C++ MFC实现的字符点阵转换工具
- c++ mfc 校园导航 最短路径计算
- Visual C++程序设计学习笔记光盘源码
- 餐厅管理系统 C++,自己随便做做的,
- 学生信息管理系统C++简单教学版
- 用vs2015编译好的百度ocr c++依赖库
- C++基于MFC与ACCESS数据库的成绩管理系
- C++并发编程第二版,中文版
- 抓包源码,有兴趣的拿走
- c++贪吃蛇编程源代码论文设计c语言
- vc++调用usb摄像头,进行拍照,保存为
- C++。电信计费系统
- C++MFC界面美化源代码
- 遥感图像融合C++代码
- 计算机图形学 图形变换 C++ MFC
- 二维码生成 C++
- C++东南大学何洁月课件(总)ppt
- V isual C++ 端口扫描 源代码
- 计算机网络课程设计农大socket实现F
- c++短路电流计算软件设计
评论
共有 条评论