• Kienct与Arduino学习笔记(2) 深度图像与现实世界的深度图的坐标


    转载请注明出处:http://blog.csdn.net/lxk7280


    首先,要接触一下KinectOrbit这个摄像机库,这篇文章中有这个库的下载网址和简单的介绍:http://blog.csdn.net/lxk7280/article/details/38184355。将下载得到的文件放到对应的Processing的一个子目录后,就可以使用。


       KinectOrbit库下的鼠标和键盘的操作方法:
    1.右键拖拽:摄像机摇拍。
    2.左键拖拽:绕对象旋转。

    3.滚动:缩放操作。
    4.P键保存。O键退出。再次执行程序后,会以上次保存的试点为開始,视点的參数储存在数据目录下的一个名为:“orbitSet_0.csv”的文件中,假设该文件被删除。则以默认值为開始。


        先附上三张这次的效果图:
    1.近距离视角


    由于Kinect的深度范围和视野角度范围例如以下:
    顏色與深度 1.2 ~ 3.6 公尺
    骨架追蹤 1.2 ~ 3.6 公尺
    視野角度 水平 57 度、垂直 43 度
    我的部分身体在Kinect的深度摄像头所能拍摄到的范围之外,因此在图片中没有显示出来。

    2.中等距离视角


    非常明显能看到我背后的桌子和我的手臂在后面的大大的投影。

    3.远距离视角




    代码:
    第一步:导入自己须要用到的三个库
    import processing.opengl.*;
    import SimpleOpenNI.*;
    import kinectOrbit.*;
    第二步:定义对象myOrbit和kinect
    KinectOrbit myOrbit;
    SimpleOpenNI kinect;
    第三步:初始化对象。启动深度摄像头
    void setup(){
        size(800,600,OPENGL);
        myOrbit = new KinectOrbit(this,0);
        kinect = new SimpleOpenNI(this);
        kinect.enableDepth();
    }
    第四步:在3D渲染下,绘点云和视锥(即在屏幕上可见的3D区域。kinect视锥意思为kinect在空间中能够看到的区域。)
    void draw(){
        kinect.update();
        background(0);
        
        myOrbit.pushOrbit(this);
        drawPointCloud();
        kinect.drawCamFrustum();
        myOrbit.popOrbit(this);
    }
    第五步:完毕绘点云函数
    void drawPointCloud(){
      int[] depthMap = kinect.depthMap();
      int steps = 3;
      int index;
      PVector realWorldPoint;
      
      stroke(255);
      for(int y=0;y < kinect.depthHeight();y += steps){
        for(int x=0;x < kinect.depthWidth();x += steps){
          stroke(kinect.depthImage().get(x,y));
          index = x + y * kinect.depthWidth();
          if(depthMap[index] > 0){
            realWorldPoint = kinect.depthMapRealWorld()[index];
            point(realWorldPoint.x,realWorldPoint.y,realWorldPoint.z);
          }
        }
      } 
    }










    版权声明:本文博客原创文章。博客,未经同意,不得转载。

  • 相关阅读:
    MVC————前台中,冒号与等号的区别
    MVC-通过对象获取整个表单内容
    对Webservice的理解
    windows上使用logstash-input-jdbc
    elasticsearch-head的安装和使用
    最简单的php学习
    linq to sql 和linq to php 的区别
    thinkphp中JS文件不能写__ROOT__变量
    用curl获取https请求时出现错误的处理
    优化apk的odex处理
  • 原文地址:https://www.cnblogs.com/bhlsheji/p/4625206.html
Copyright © 2020-2023  润新知