您的位置:首页 > 运维架构

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

2014-09-06 10:22 162 查看
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)

以下是例程:

//使用深度数据,重建三维点云
int row = 0, col = 0, pointId = 0;
for (row = 0;row < depthHeight;row++)// row == y 遍历深度矩阵所有行
{
unsigned short* data = DepthData.ptr<unsigned short>(row);
for(col = 0;col < depthWidth;col++)// col == x 遍历深度矩阵所有列
{
if(*data>500 && *data<1500)    //取0.5m-1.5m范围深度数据
{
pointId ++;
// [X,Y,Z]' = depth[x,y] * inv_K * [x,y,1]
cloud.points[pointId].x = *data * (col * mInvK.at<float>(0,0) +
row * mInvK.at<float>(0,1) + mInvK.at<float>(0,2));    //X

cloud.points[pointId].y = *data * (col * mInvK.at<float>(1,0) +
row * mInvK.at<float>(1,1) + mInvK.at<float>(1,2));    //Y

cloud.points[pointId].z = *data;    //Z
}
else    // 其他范围数据无操作
{
}
data++;    //深度数据指针,指向下一位置深度数据
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: