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
//關於rangeImage.createFromPointCloud()參數的解釋 (涉及的角度都為弧度為單位) :
// cloud 為創建深度圖像所需要的點雲
//angularResolution 深度傳感器的角度分辨率
//maxAngleWidth 深度傳感器的水平最大采樣角度
//maxAngleHeight 垂直最大采樣角度
//sensorPose 設置的模擬傳感器的位姿是一個仿射變換矩陣,默認為4*4的單位矩陣變換
//coordinate_frame 定義按照那種坐標系統的習慣 默認為CAMERA_FRAME
//noiseLevel 獲取深度圖像深度時,鄰近點對查詢點距離值的影響水平
//minRange 設置最小的獲取距離,小於最小的獲取距離的位置為傳感器的盲區
//borderSize 設置獲取深度圖像邊緣的寬度 默認為0
實際效果圖