首页 > 代码库 > PCL 点云数据操作 OpenCV遍历数据
PCL 点云数据操作 OpenCV遍历数据
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 =http://www.mamicode.com/ M.ptr
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 = http://www.mamicode.com/DepthData.ptrshort>(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)); //X14 15 cloud.points[pointId].y = *data * (col * mInvK.at<float>(1,0) +16 row * mInvK.at<float>(1,1) + mInvK.at<float>(1,2)); //Y17 18 cloud.points[pointId].z = *data; //Z19 }20 else // 其他范围数据无操作21 {22 }23 data++; //深度数据指针,指向下一位置深度数据24 }25 }
PCL 点云数据操作 OpenCV遍历数据
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。