我将此深度图像转换为pcl :: pointcloud。pcl ::点云到cv ::垫深度图像
使用下列内容:
PointCloud::Ptr PointcloudUtils::RGBDtoPCL(cv::Mat depth_image, Eigen::Matrix3f& _intrinsics)
{
PointCloud::Ptr pointcloud(new PointCloud);
float fx = _intrinsics(0, 0);
float fy = _intrinsics(1, 1);
float cx = _intrinsics(0, 2);
float cy = _intrinsics(1, 2);
float factor = 1;
depth_image.convertTo(depth_image, CV_32F); // convert the image data to float type
if (!depth_image.data) {
std::cerr << "No depth data!!!" << std::endl;
exit(EXIT_FAILURE);
}
pointcloud->width = depth_image.cols; //Dimensions must be initialized to use 2-D indexing
pointcloud->height = depth_image.rows;
pointcloud->resize(pointcloud->width*pointcloud->height);
#pragma omp parallel for
for (int v = 0; v < depth_image.rows; v += 4)
{
for (int u = 0; u < depth_image.cols; u += 4)
{
float Z = depth_image.at<float>(v, u)/factor;
PointT p;
p.z = Z;
p.x = (u - cx) * Z/fx;
p.y = (v - cy) * Z/fy;
p.z = p.z/1000;
p.x = p.x/1000;
p.y = p.y/1000;
pointcloud->points.push_back(p);
}
}
return pointcloud;
}
这个伟大的工程,我已经运行在云上的一些处理,现在我需要将点云转换回CV ::垫深度图像。我找不到这样的例子,并且无法绕过它。与上述功能相反的是什么?
我该如何将pcl :: pointcloud转换回cv :: mat?
谢谢。
你想的'PX, py,pz'代表一个浮点像素? – zindarod
嗨,谢谢你的回复。我想是的,是的。基本上我想结束上面的图像。相同数量的列/行。 – anti
...目标是扭转上述功能。所以从图像到点云,然后回到完全相同的图像。谢谢! – anti