首页 > 代码库 > Kienct与Arduino学习笔记(2) 深度图像和真实世界坐标系中的深度图
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); } } } }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。