点云转深度图显示函数:
void depthvisual()
{
// Object for storing the point cloud.
pcl::PointCloud<:pointxyz>::Ptr cloud(new pcl::PointCloud<:pointxyz>);
// Object for storing the normals.
pcl::PointCloud<:normal>::Ptr normals(new pcl::PointCloud<:normal>);
// Read a PCD file from disk.
if (pcl::io::loadPCDFile<:pointxyz>("vincent.pcd", *cloud) != 0)
{
return ;
}
Eigen::Matrix4f T;
T << 1, 0, 0, 0,
0, 1, 0, 0,
0, 0, 1, 500,
0, 0, 0, 1;
Eigen::Matrix4f T1;
T1 << 0, -1, 0, 0,
1, 0, 0, 0,
0, 0, 1, 0,
0, 0, 0, 1;
Eigen::Affine3f Traw(T*T1);
// Parameters needed by the planar range image object:
// Image size. Both Kinect and Xtion work at 640x480.
int imageSizeX = 1500;
int imageSizeY = 1500;
// Center of projection. here, we choose the middle of the image.
float centerX = imageSizeX / 2.0f;
float centerY = imageSizeY / 2.0f;
// Focal length. The value seen here has been taken from the original depth images.
// It is safe to use the same value vertically and horizontally.
float focalLengthX = 800.0f, focalLengthY = focalLengthX;
// Sensor pose. Thankfully, the cloud includes the data.
Eigen::Affine3f sensorPose = Traw;// Eigen::Affine3f(Eigen::Translation3f(0, 0, 0));
// Noise level. If greater than 0, values of neighboring points will be averaged.
// This would set the search radius (e.g., 0.03 == 3cm).
float noiseLevel = 0.0f;
// Minimum range. If set, any point closer to the sensor than this will be ignored.
float minimumRange = 0.0f;
// Planar range image object.
pcl::RangeImagePlanar rangeImagePlanar;
rangeImagePlanar.createFromPointCloudWithFixedSize(*cloud, imageSizeX, imageSizeY,
centerX, centerY, focalLengthX, focalLengthX,
sensorPose, pcl::RangeImage::LASER_FRAME,
noiseLevel, minimumRange);
// Visualize the image.
pcl::visualization::RangeImageVisualizer viewer("Planar range image");
viewer.showRangeImage(rangeImagePlanar);
while (!viewer.wasStopped())
{
viewer.spinOnce();
// Sleep 100ms to go easy on the CPU.
pcl_sleep(0.1);
}
}