抄数点云文件件RGB值是什么意思

PCL学习笔记(4):创建点云文件、加载点云文件
时间: 09:24:37
&&&& 阅读:7541
&&&& 评论:
&&&& 收藏:0
标签:&&&&&&PCL(point cloud library)系列笔记:
//先上代码:
bool saveThePointCloud()
pcl::PointCloud&pcl::PointXYZ& C
//定义点云对象,类型PointXYZ
// 创建点云
Cloud.width=30;
Cloud.height=1;
Cloud.is_dense=
Cloud.points.resize(Cloud.width*Cloud.height);
srand(unsigned(int(NULL)));
for(size_t i=0;i&Cloud.points.size();++i)
{//RAND_MAX = 32767
Cloud.points[i].x = 1024*rand()/(RAND_MAX+1.0f);
Cloud.points[i].y = 0.0f;
Cloud.points[i].z = 0.0f;
else if(i&20)
Cloud.points[i].x = 0.0f;
Cloud.points[i].y = 1024*rand()/(RAND_MAX+1.0f);
Cloud.points[i].z = 0.0f;
Cloud.points[i].x = 0.0f;
Cloud.points[i].y = 0.0f;
Cloud.points[i].z = 1024*rand()/(RAND_MAX+1.0f);
// pcl::io::savePCDFile(&pointCloudValueFile.pcd&,Cloud);
pcl::io::savePCDFileASCII(&pointCloudFile.pcd&,Cloud);//这两种save的结果貌似是一样的。
然后在调用此函数即可。
完整程序:
#include &pcl/visualization/cloud_viewer.h&
#include &iostream&
#include &pcl/io/io.h&
#include &pcl/io/pcd_io.h&
//int user_
//Initialize the viewer including the backgroundcolor,coordinate axis,and others.
void viewerOneOff (pcl::visualization::PCLVisualizer& viewer)
//set the backgroundcolor:R,G,B
 viewer.setBackgroundColor (1.0, 1.0, 1.0);//背景为白色
pcl::PointXYZ
viewer.addSphere (o, 5, &sphere&,0);*/
//viewer.addLine(o,&line&,0);
/*std::cout && &i only run once& && std::*/
//void viewerPsycho (pcl::visualization::PCLVisualizer& viewer)
static unsigned count = 0;
ss && &Once per viewer loop: & && count++;
viewer.removeShape (&text&, 0);
viewer.addText (ss.str(), 200, 300, &text&, 0);
//FIXME: possible race condition here:
user_data++;
//Accomplish loading a PCDFile,creating a viewer,and show the cloud at the viewer.
void showTheCloud()
pcl::PointCloud&pcl::PointXYZRGBA&::Ptr cloud (new pcl::PointCloud&pcl::PointXYZRGBA&);
pcl::io::loadPCDFile (&my_point_cloud.pcd&, *cloud);
pcl::visualization::CloudViewer viewer(&Cloud Viewer&);
//blocks until the cloud is actually rendered
viewer.showCloud(cloud);
//use the following functions to get access to the underlying more advanced/powerful
//PCLVisualizer
//This will only get called once
viewer.runOnVisualizationThreadOnce (viewerOneOff);
//This will get called once per visualization iteration
//viewer.runOnVisualizationThread (viewerPsycho);
while (!viewer.wasStopped ())
//you can also do cool processing here
//FIXME: Note that this is running in a separate thread from viewerPsycho
//and you should guard against race conditions yourself...
//user_data++;
//Create a point-cloud object,and generate a PCD File to save the point cloud object.
bool saveThePointCloud()
pcl::PointCloud&pcl::PointXYZ& C
//定义点云对象
// 创建点云
Cloud.width=30;
Cloud.height=1;
Cloud.is_dense=
Cloud.points.resize(Cloud.width*Cloud.height);
srand(unsigned(int(NULL)));
for(size_t i=0;i&Cloud.points.size();++i)
{//RAND_MAX = 32767
Cloud.points[i].x = 1024*rand()/(RAND_MAX+1.0f);
Cloud.points[i].y = 0.0f;
Cloud.points[i].z = 0.0f;
else if(i&20)
Cloud.points[i].x = 0.0f;
Cloud.points[i].y = 1024*rand()/(RAND_MAX+1.0f);
Cloud.points[i].z = 0.0f;
Cloud.points[i].x = 0.0f;
Cloud.points[i].y = 0.0f;
Cloud.points[i].z = 1024*rand()/(RAND_MAX+1.0f);
pcl::io::savePCDFile(&pointCloudValueFile.pcd&,Cloud);
pcl::io::savePCDFileASCII(&pointCloudFile.pcd&,Cloud);
int main ()
if(saveThePointCloud())
showTheCloud();
std::cout&&&Failed&&&
这样,在工程目录下会多一个pointCloudFile.pcd文件。用记事本打开就可以看到数据。【PCD格式说明请阅读本人学习笔记】
至于命令窗口显示的Failed to find match for failed ‘rgba‘,是因为PCD文件一般的格式中是:
FIELDS x y z rgb
SIZE 4 4 4 4
TYPE F F F F
COUNT 1 1 1 1
而我们获得的pcd文件里并没有第四列数据。初步估计是因为生成点云时,我们并没有给每一个point设置rgb参数。标签:&&&&&&原文地址:http://blog.csdn.net/chentravelling/article/details/
&&国之画&&&& &&&&chrome插件
版权所有 京ICP备号-2
迷上了代码!RGB-D点云生成
时间: 15:35:09
&&&& 阅读:56
&&&& 评论:
&&&& 收藏:0
标签:&&&&&&&&&&&&&&&&&&&&&&&&&&&
bin文件夹下为生成的可执行文件generate_cloud,执行时和data文件放在同一文件夹下。
图像数据来自小觅相机。
src下的源码,包括generatePointCloud.cpp和CMakeLists.txt
// C++ 标准库
#include &iostream&
#include &string&
//#include &unistd.h&
using namespace
// OpenCV 库
#include &opencv2/core/core.hpp&
#include &opencv2/highgui/highgui.hpp&
//#include &pcl/visualization/cloud_viewer.h&
#include &pcl/io/pcd_io.h&
#include &pcl/point_types.h&
// 定义点云类型
typedef pcl::PointXYZRGBA PointT;
typedef pcl::PointCloud&PointT& PointC
//pcl::visualization::CloudViewer viewer("pcd viewer");
// 相机内参
const double camera_factor = <span style="color: #00;
const double camera_cx = 325.5;
const double camera_cy = 253.5;
//nyuv2数据集:http://cs.nyu.edu/~silberman/datasets/
const double camera_fx = 518.0;
const double camera_fy = 519.0;
const double camera_cx = <span style="color: #2.3;
const double camera_cy = <span style="color: #4.9;
const double camera_fx = <span style="color: #9.8;
const double camera_fy = <span style="color: #2.8;
int main( int argc, char** argv )
// 读取./data/rgb.png和./data/depth.png,并转化为点云
// 图像矩阵
cv::Mat rgb,
// 使用cv::imread()来读取图像
// API: http://docs.opencv.org/modules/highgui/doc/reading_and_writing_images_and_video.html?highlight=imread#cv2.imread
rgb = cv::imread( "./data/rgb.png" );
// rgb 图像是8UC3的彩色图像
// depth 是16UC1的单通道图像,注意flags设置-1,表示读取原始数据不做任何修改
depth = cv::imread( "./data/depth.png", -<span style="color: # );
// 点云变量
// 使用智能指针,创建一个空点云。这种指针用完会自动释放。
PointCloud::Ptr cloud ( new PointCloud );
// 遍历深度图
for (int m = <span style="color: #; m & depth. m++)
for (int n=<span style="color: #; n & depth. n++)
// 获取深度图中(m,n)处的值
ushort d = depth.ptr&ushort&(m)[n];
// d 可能没有值,若如此,跳过此点
if (d == <span style="color: # || d &= <span style="color: #96)
//获得一个点的位置与颜色
// d 存在值,则向点云增加一个点
// 计算这个点的空间坐标
p.z = double(d) / camera_
p.x = (n - camera_cx) * p.z / camera_
p.y = (m - camera_cy) * p.z / camera_
// 从rgb图像中获取它的颜色
// rgb是三通道的BGR格式图,所以按下面的顺序获取颜色
p.b = rgb.ptr&uchar&(m)[n*<span style="color: #];
p.g = rgb.ptr&uchar&(m)[n*<span style="color: #+<span style="color: #];
p.r = rgb.ptr&uchar&(m)[n*<span style="color: #+<span style="color: #];
// 把p加入到点云中
cloud-&points.push_back( p );
viewer.showCloud(cloud);
sleep(100);////#include &unistd.h&
// 设置并保存点云
cloud-&height = <span style="color: #;
cloud-&width = cloud-&points.size();
cout&&"point cloud size = "&&cloud-&points.size()&&
cloud-&is_dense = false;
pcl::io::savePCDFile( "./pointcloud.pcd", *cloud );
// 清除数据并退出
cloud-&points.clear();
cout&&"Point cloud saved."&&
return <span style="color: #;
CMakeLists.txt
# 增加PCL库的依赖
FIND_PACKAGE( PCL REQUIRED )
list(REMOVE_ITEM PCL_LIBRARIES "vtkproj4") # use this in Ubuntu <span style="color: #.04
# 增加opencv的依赖
FIND_PACKAGE( OpenCV REQUIRED )
# 添加头文件和库文件
ADD_DEFINITIONS( ${PCL_DEFINITIONS} )
INCLUDE_DIRECTORIES( ${PCL_INCLUDE_DIRS}
LINK_LIBRARIES( ${PCL_LIBRARY_DIRS} )
ADD_EXECUTABLE( generate_cloud generatePointCloud.cpp )
TARGET_LINK_LIBRARIES( generate_cloud ${OpenCV_LIBS}
${PCL_LIBRARIES} )
和src文件夹在同一文件夹下的CMakeLists.txt
CMAKE_MINIMUM_REQUIRED( VERSION <span style="color: #.8 )
PROJECT( slam )
SET(CMAKE_CXX_COMPILER "g++")
SET( CMAKE_BUILD_TYPE Debug
SET(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)
SET(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib)
INCLUDE_DIRECTORIES( ${PROJECT_SOURCE_DIR}/include )
LINK_DIRECTORIES( ${PROJECT_SOURCE_DIR}/lib)
ADD_SUBDIRECTORY( ${PROJECT_SOURCE_DIR}/src )
编译后可执行文件在bin中。
学习链接:
&标签:&&&&&&&&&&&&&&&&&&&&&&&&&&&原文地址:https://www.cnblogs.com/112358nizhipeng/p/9217145.html
&&国之画&&&& &&&&chrome插件
版权所有 京ICP备号-2
迷上了代码!一种利用半稠密点云及RGB图像构建稠密表面模型地图的方法(英文)--《Frontiers of Information Technology & Electronic Engineering》2015年07期
一种利用半稠密点云及RGB图像构建稠密表面模型地图的方法(英文)
【摘要】:目的:针对仅能通过轻型激光测距仪获取半稠密点云的环境地图构建问题,提出一种构建稠密表面模型的方法。该方法使机器人能够利用所构建的稠密表面模型地图完成定位、导航及目标搜索等任务。创新点:提出一种基于点云分割的点云表面重采样方法及一种基于点云概率模型的表面模型融合方法。对半稠密点云进行保留表面结构特性的重采样来获取观测数据的稠密表面模型。并递增式地将新获得的稠密表面模型融合进已有的稠密表面地图中,从而获得几何一致性较好的环境表面模型地图。实验效果:图6、7展示了基于本文方法所构建的稠密表面模型地图的效果。其几何结构精确且表面纹理清晰。此外,图8、9分别重点展示了表面重采样的作用以及本文提出的重采样方法的效果。图11则展示了本文方法对表面模型动态更新的较好支持。结论:使用本文所提方法,机器人可携带轻便式激光测距仪,获取半稠密点云后再进一步处理和融合得到几何一致性较高、表面精细的稠密表面问题模型地图,更好地实现定位、导航及目标搜索等任务。
【作者单位】:
【基金】:
【分类号】:P225.2;TP242
欢迎:、、)
支持CAJ、PDF文件格式,仅支持PDF格式
【参考文献】
中国期刊全文数据库
王永波;盛业华;闾国年;田鹏;张凯;;[J];中国图象图形学报;2007年09期
【共引文献】
中国期刊全文数据库
李佳田;李佳;段平;余莉;;[J];武汉大学学报(信息科学版);2011年09期
刘晓平;段瑞青;余烨;;[J];中国图象图形学报;2012年03期
中国重要会议论文全文数据库
王新波;李学军;王林旭;;[A];全国第19届计算机技术与应用(CACIS)学术会议论文集(下册)[C];2008年
中国博士学位论文全文数据库
莫堃;[D];华中科技大学;2010年
王永波;[D];南京师范大学;2008年
张连伟;[D];国防科学技术大学;2009年
何俊学;[D];兰州理工大学;2011年
中国硕士学位论文全文数据库
胡明;[D];华南理工大学;2010年
李佳;[D];昆明理工大学;2011年
燕昊;[D];昆明理工大学;2011年
杜丽美;[D];江南大学;2009年
倪小军;[D];苏州大学;2010年
王龙阳;[D];山东理工大学;2012年
朱煜;[D];西北大学;2012年
段瑞青;[D];合肥工业大学;2012年
杨彪;[D];华中科技大学;2014年
【二级参考文献】
中国期刊全文数据库
严京旗,施鹏飞;[J];计算机学报;2001年10期
王青,王融清,鲍虎军,彭群生;[J];软件学报;2000年09期
中国博士学位论文全文数据库
李立新;[D];浙江大学;2001年
【相似文献】
中国期刊全文数据库
周华民,张宜生,李德群;[J];自然科学进展;2001年03期
刘震;余洋;李建松;肖少辉;;[J];测绘学报;2014年05期
罗述谦,闫华;[J];首都医科大学学报;1999年01期
乔建良;牛军;杨智;邹继军;常本康;;[J];光学技术;2009年01期
张弓;许伟平;陈莹;;[J];测绘与空间地理信息;2010年02期
周伟东;[J];Advances in Atmospheric S2002年02期
李楠;吴信才;肖克炎;陈析璆;;[J];华中科技大学学报(自然科学版);2013年03期
中国重要会议论文全文数据库
李向前;黄美发;匡兵;鲍家定;王乔义;;[A];中国电子学会电子机械工程分会2009年机械电子学学术会议论文集[C];2009年
王金星;蒋向前;马利民;徐振高;李柱;;[A];第五届海峡两岸计量与质量学术研讨会论文集[C];2004年
卢文龙;蒋向前;刘晓军;徐振高;;[A];纪念第38届“世界标准日”标准化学术论文汇编[C];2007年
贺文生;张明贤;滕霖;;[A];第四届全国岩石破碎学术讨论会论文集[C];1989年
杨昀;;[A];中国土木工程学会计算机应用分会第七届年会论文集[C];1999年
中国硕士学位论文全文数据库
陈伟强;[D];南昌航空大学;2014年
彭娟;[D];桂林电子科技大学;2010年
陈礼聪;[D];昆明理工大学;2014年
张勇;[D];苏州大学;2011年
吴守亮;[D];安徽理工大学;2011年
&快捷付款方式
&订购知网充值卡
400-819-9993PCL 不同类型的点云之间进行类型转换
PCL 不同类型的点云之间进行类型转换
PCL 不同类型的点云之间进行类型转换
pcl::PointCloud&pcl::PointXYZ&::Ptr cloud_xyz ( pcl::PointCloud&pcl::PointXYZ& ());
pcl::PointCloud&pcl::PointXYZRGBA&::Ptr cloud_xyzrgba ( pcl::PointCloud&pcl::PointXYZRGBA& ());
pcl::copyPointCloud(*cloud_xyz, *cloud_xyzrgba);
cloud_xyzrgba-&points.resize(cloud_xyz-&size());
for (size_t i = 0; i & cloud_xyz-&points.size(); i++) {
cloud_xyzrgb-&points[i].x = cloud_xyz-&points[i].x;
cloud_xyzrgb-&points[i].y = cloud_xyz-&points[i].y;
cloud_xyzrgb-&points[i].z = cloud_xyz-&points[i].z;
参考网站:
PCL中点云数据格式之间的转化
读取点云文件(.xyz)
基础知识2:PCL中pcl::PointCloud::Ptr 和Pcl::PointCloud两个类的相互转换
点云数据的读取(las、txt、xyz格式)
如何使用PCL将XYZRGB点云转换为彩色mesh模型
PCL库中的PointCloud数据类型
读取pcl::PointXYZRGB中的RGB信息
PCL编程-点云采样
《PCL点云库学习&VS2010(X64)》Part 25 PCL点云操作函数汇集
PCL--pcl::copyPointCloud
没有更多推荐了,5张RGB/深度图实现点云拼接
5张RGB/深度图实现点云拼接
该代码源于《视觉SLAM十四讲》 joinMap.cpp
(拼接点云)
主要操作有
该页代码用于日后查找方便 (添加了部分笔记)
先进入build文件夹对源码进行编译 编译出的可执行文件可拷贝到pose.txt 文件路径下(该路径下还有存放图片的文件夹)
而后执行./joinMap
生成点云以PCD格式存储在map.pcd中
用PCL提供的可视化程序大概该文件
pcl_viewer map.pcl
根据pose.txt 中的相机外参 (平移向量+ 旋转四元数)转换成矩阵T;对相机坐标(根据像素和实物关系求得)用T转换成世界坐标;之后根据5张图循环构造点云。
#include &iostream&
#include &fstream&
using namespace std;
#include &opencv2/core/core.hpp&
#include &opencv2/highgui/highgui.hpp&
#include &Eigen/Geometry&
#include &boost/format.hpp&
#include &pcl/point_types.h&
#include &pcl/io/pcd_io.h&
#include &pcl/visualization/pcl_visualizer.h&
int main( int argc, char** argv )
vector&cv::Mat& colorImgs, depthI
vector&Eigen::Isometry3d&
ifstream fin("./pose.txt");
cerr&&"请在有pose.txt的目录下运行此程序"&&
for ( int i=0; i&5; i++ )
boost::format fmt( "./%s/%d.%s" );
colorImgs.push_back( cv::imread( (fmt%"color"%(i+1)%"png").str() ));
depthImgs.push_back( cv::imread( (fmt%"depth"%(i+1)%"pgm").str(), -1 ));
double data[7] = {0};
for ( auto& d:data )
Eigen::Quaterniond q( data[6], data[3], data[4], data[5] );
Eigen::Isometry3d T(q);
T.pretranslate( Eigen::Vector3d( data[0], data[1], data[2] ));
poses.push_back( T );
double cx = 325.5;
double cy = 253.5;
double fx = 518.0;
double fy = 519.0;
double depthScale = 1000.0;
cout&&"正在将图像转换为点云..."&&
typedef pcl::PointXYZRGB PointT;
typedef pcl::PointCloud&PointT& PointC
PointCloud::Ptr pointCloud( new PointCloud );
for ( int i=0; i&5; i++ )
cout&&"转换图像中: "&&i+1&&
cv::Mat color = colorImgs[i];
cv::Mat depth = depthImgs[i];
Eigen::Isometry3d T = poses[i];
for ( int v=0; v&color. v++ )
for ( int u=0; u&color. u++ )
unsigned int d = depth.ptr&unsigned short& ( v )[u];
if ( d==0 ) continue;
Eigen::Vector3
point[2] = double(d)/depthS
point[0] = (u-cx)*point[2]/
point[1] = (v-cy)*point[2]/
Eigen::Vector3d pointWorld = T*
p.x = pointWorld[0];
p.y = pointWorld[1];
p.z = pointWorld[2];
p.b = color.data[ v*color.step+u*color.channels() ];
p.g = color.data[ v*color.step+u*color.channels()+1 ];
p.r = color.data[ v*color.step+u*color.channels()+2 ];
pointCloud-&points.push_back( p );
pointCloud-&is_dense = false;
cout&&"点云共有"&&pointCloud-&size()&&"个点."&&
pcl::io::savePCDFileBinary("map.pcd", *pointCloud );
没有更多推荐了,

我要回帖

更多关于 如何通过点云生成dsm文件 的文章

 

随机推荐