我正在将这个深度图像转换为 pcl::pointcloud。
使用以下内容:
这很好用,我已经在云端上处理了一些内容,现在需要将点云转换回cv :: Mat深度图像。我找不到一个例子,并且对此感到困惑。以上功能的相反操作是什么?
如何将pcl :: pointcloud转换回cv :: mat?
谢谢。
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 :: Mat深度图像。我找不到一个例子,并且对此感到困惑。以上功能的相反操作是什么?
如何将pcl :: pointcloud转换回cv :: mat?
谢谢。
p.x, p.y, p.z
表示一个浮点像素吗? - zindarod++
替换了它。我正在尝试您的新代码,看起来应该可以工作!但我仍然得到黑色图像。我正在测试各种设置,以便找出问题所在。非常感谢您的帮助。 - anti