基于PCL实现RGB-D图像转换为点云

  原理: RGB 和 depth图已经对齐了,也就是 depth 图中某个位置的深度值在 RGB图中同样的位置处就是它对应的颜色。假设相机内参矩阵为:
在这里插入图片描述
则RGB-D图像转换为点云代码如下:

for (int m = 0; m < depth.rows; m++)
    for (int n = 0; n < depth.cols; n++)
    {
        // 获取深度图中(m,n)处的值
        ushort d = depth.ptr<ushort>(m)[n];
        // d 可能没有值,若如此,跳过此点
        if (d == 0)
            continue;
        // d 存在值,则向点云增加一个点
        PointT p;
        // 计算这个点的空间坐标
        p.z = double(d) / camera.scale;
        p.x = (n - camera.cx) * p.z / camera.fx;
        p.y = (m - camera.cy) * p.z / camera.fy;

        // 从rgb图像中获取它的颜色
        p.b = rgb.ptr<uchar>(m)[n * 3];
        p.g = rgb.ptr<uchar>(m)[n * 3 + 1];
        p.r = rgb.ptr<uchar>(m)[n * 3 + 2];

        // 把p加入到点云中
        cloud->points.push_back(p);
    }

注意:OpenCV里 RGB 图像里存储颜色顺序为BGR,所以从 RGB中获取颜色时顺序也是 BGR而不是RGB。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Cynthia.Chen

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值