PCL 点云数据操作 OpenCV遍历数据

本文介绍如何利用深度数据重建三维点云,并通过OpenCV实现矩阵操作。具体包括使用OpenCV遍历矩阵的方法,以及根据深度数据和相机内参矩阵生成三维点云的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.对于点云类型实例cloud,对其第i个点进行赋值操作,使用cloud.point[i].x 和 cloud.point[i].y 和cloud.point[i].z 分别对其XYZ坐标赋值。

  cloud.point[i].x = 

  cloud.point[i].y =

  cloud.point[i].z = 

2.OpenCV 遍历矩阵M,使用行指针M.ptr<DataType>(row),该指针指向第row行。

  <DataType>* data = M.ptr<DataType>(row)

3.OpenCV 取给定位置索引矩阵M元素,M.at<DataType>(i,j),表示取第i行,第j列元素。

  a = M.at<DataType>(i,j)

 

以下是例程:

 1     //使用深度数据,重建三维点云
 2     int row = 0, col = 0, pointId = 0;
 3     for (row = 0;row < depthHeight;row++)// row == y 遍历深度矩阵所有行
 4     {
 5         unsigned short* data = DepthData.ptr<unsigned short>(row);
 6         for(col = 0;col < depthWidth;col++)// col == x 遍历深度矩阵所有列
 7         {
 8             if(*data>500 && *data<1500)    //取0.5m-1.5m范围深度数据
 9             {
10                 pointId ++;
11                 // [X,Y,Z]' = depth[x,y] * inv_K * [x,y,1]
12                 cloud.points[pointId].x = *data * (col * mInvK.at<float>(0,0) +
13                     row * mInvK.at<float>(0,1) + mInvK.at<float>(0,2));    //X
14 
15                 cloud.points[pointId].y = *data * (col * mInvK.at<float>(1,0) +
16                     row * mInvK.at<float>(1,1) + mInvK.at<float>(1,2));    //Y
17 
18                 cloud.points[pointId].z = *data;    //Z
19             }
20             else    // 其他范围数据无操作
21             {
22             }
23             data++;    //深度数据指针,指向下一位置深度数据
24         }
25     }

 

转载于:https://www.cnblogs.com/xzd1575/p/3959181.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值