PCL點雲轉換為深度圖並儲存
阿新 • • 發佈:2020-11-13
pcl轉深度圖主要是createFromPointCloud()函式,引數配置基本可以不變,照這個寫就行.儲存主要是兩個函式getVisualImage(),saveRgbPNGFile()沒什麼難度,頭寫對了就沒問題
#include <stdio.h> #include <stdlib.h> #include <pcl/point_types.h> #include <pcl/io/pcd_io.h> #include <pcl/io/ply_io.h> #include <pcl/features/normal_3d.h> #include <pcl/filters/voxel_grid.h> #include <pcl/filters/extract_indices.h> #include <pcl/filters/statistical_outlier_removal.h> #include <pcl/filters/conditional_removal.h> #include <pcl/visualization/pcl_visualizer.h> #include <pcl/common/transforms.h> #include <pcl/range_image/range_image.h> #include <pcl/io/png_io.h> #include <pcl/visualization/common/float_image_utils.h> #include<iostream> #include<cstdlib> #include<ctime> using namespace std; //main int main(int argc, char** argv) { pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>); #pragma region create_range_image // We now want to create a range image from the above point cloud, with a 1deg angular resolution float angularResolution = (float)(1.0f * (M_PI / 180.0f)); // 1.0 degree in radians float maxAngleWidth = (float)(360.0f * (M_PI / 180.0f)); // 360.0 degree in radians float maxAngleHeight = (float)(180.0f * (M_PI / 180.0f)); // 180.0 degree in radians Eigen::Affine3f sensorPose = (Eigen::Affine3f)Eigen::Translation3f(0.0f, 0.0f, 0.0f); pcl::RangeImage::CoordinateFrame coordinate_frame = pcl::RangeImage::CAMERA_FRAME; float noiseLevel = 0.00; float minRange = 0.0f; int borderSize = 1; pcl::RangeImage rangeImage; rangeImage.createFromPointCloud(*cloud, angularResolution, maxAngleWidth, maxAngleHeight, sensorPose, coordinate_frame, noiseLevel, minRange, borderSize); std::cout << rangeImage << "\n"; float* ranges = rangeImage.getRangesArray(); unsigned char* rgb_image = pcl::visualization::FloatImageUtils::getVisualImage(ranges, rangeImage.width, rangeImage.height); pcl::io::saveRgbPNGFile("ha.png", rgb_image, rangeImage.width, rangeImage.height); #pragma endregion
實際效果圖