zoukankan      html  css  js  c++  java
  • 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 = 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     }
  • 相关阅读:
    for循环,pydev提示未使用的变量,解决办法
    sc 与net命令的区别
    Selenium测试Ajax程序(转)
    Python yield 使用浅析(转)
    python操作Excel读写--使用xlrd
    Python操作Mysql实例代码教程在线版(查询手册)
    MySQL之alter语句用法总结
    使用WebDriver遇到的那些坑(转)
    python 列表转为字典的两个小方法
    python
  • 原文地址:https://www.cnblogs.com/xzd1575/p/3959181.html
Copyright © 2011-2022 走看看