刚入门学习PCL点云库,有些基础东西比较茫然。比如已经存在由RGB-D sensor获取的rgb image和depth image,如何将其转化为点云。下面,以比较通用的点云类型pcl::PointXYZRGB为例,讲述如何获取对应的点云数据。
**
code:
**
pcl::PointCloud::Ptr depth2cloud( cv::Mat rgb_image, cv::Mat depth_image )
{
float f = 570.3;
float cx = 320.0, cy = 240.0;
pcl::PointCloud<pcl::PointXYZRGB>::Ptr cloud_ptr( new pcl::PointCloud<pcl::PointXYZRGB> () );
cloud_ptr->width = rgb_image.cols;
cloud_ptr->height = rgb_image.rows;
cloud_ptr->is_dense = false;
for ( int y = 0; y < rgb_image.rows; ++ y ) {
for ( int x = 0; x < rgb_image.cols; ++ x ) {
pcl::PointXYZRGB pt;
if ( depth_image.at<unsigned short>(y, x) != 0 )
{
pt.z = depth_image.at<unsigned short>(y, x)/1000.0;
pt.x = (x-cx)*pt.z/f;
pt.y = (y-cy)*pt.