资源简介
用的xtion(kinect也相同)和openni获取深度数据,转换为三维点云后在opengl中表示(用彩色数据作纹理),可用鼠标和键盘对三维点云进行旋转与缩放。
代码片段和文件信息
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;
using namespace openni;
using namespace cv;
float xyzdata[480][640][3];
float texture[480][640][3];
void showdevice(){
// 获取设备信息
Array aDeviceList;
OpenNI::enumerateDevices(&aDeviceList);
cout << “电脑上连接着 “ << aDeviceList.getSize() << “ 个体感设备.“ << endl;
for (int i = 0; i < aDeviceList.getSize(); ++i)
{
cout << “设备 “ << i << endl;
const DeviceInfo& rDevInfo = aDeviceList[i];
cout << “设备名: “ << rDevInfo.getName() << endl;
cout << “设备Id: “ << rDevInfo.getUsbProductId() << endl;
cout << “供应商名: “ << rDevInfo.getVendor() << endl;
cout << “供应商Id: “ << rDevInfo.getUsbVendorId() << endl;
cout << “设备URI: “ << rDevInfo.getUri() << endl;
}
}
void* GetDataFromXtion(void *p)
{
Status rc = STATUS_OK;
// 初始化OpenNI环境
OpenNI::initialize();
showdevice();
// 声明并打开Device设备。
Device xtion;
const char * deviceURL = openni::ANY_DEVICE; //设备名
rc = xtion.open(deviceURL);
// 创建深度数据流
VideoStream streamDepth;
rc = streamDepth.create(xtion SENSOR_DEPTH);
if (rc == STATUS_OK)
{
// 设置深度图像视频模式
VideoMode mModeDepth;
// 分辨率大小
mModeDepth.setResolution(640 480);
// 每秒30帧
mModeDepth.setFps(30);
// 像素格式
mModeDepth.setPixelFormat(PIXEL_FORMAT_DEPTH_1_MM);
streamDepth.setVideoMode(mModeDepth);
streamDepth.setMirroringEnabled(false);
// 打开深度数据流
rc = streamDepth.start();
if (rc != STATUS_OK)
{
cerr << “无法打开深度数据流:“ << OpenNI::getExtendedError() << endl;
streamDepth.destroy();
}
}
else
{
cerr << “无法创建深度数据流:“ << OpenNI::getExtendedError() << endl;
}
// 创建彩色图像数据流
VideoStream streamColor;
rc = streamColor.create(xtion SENSOR_COLOR);
if (rc == STATUS_OK)
{
// 同样的设置彩色图像视频模式
VideoMode mModeColor;
mModeColor.setResolution(320 240);
mModeColor.setFps(30);
mModeColor.setPixelFormat(PIXEL_FORMAT_RGB888);
streamColor.setVideoMode(mModeColor);
// 解决镜像问题
streamColor.setMirroringEnabled(false);
// 打开彩色图像数据流
rc = streamColor.start();
if (rc != STATUS_OK)
{
cerr << “无法打开彩色图像数据流:“ << OpenNI::getExtendedError() << endl;
streamColor.destroy();
}
}
else
{
cerr << “无法创建彩色图像数据流:“ << OpenNI::getExtendedError() << endl;
}
if (!streamColor.isValid() || !streamDepth.isValid())
{
cerr << “数据流不合法“ << endl;
OpenNI::shutdown();
return NULL;
}
// 图像模式注册彩色图与深度图对齐
if (xtion.isImageRegistrationModeSupported(
IMAGE_REGISTRATION_DEPTH_TO_COLOR))
{
xtion.setImageRegistrationMode(IMAGE_REGISTRATION_DEPTH_TO_COLOR);
}
// 创建OpenCV图像窗口
namedWindow(“Depth Image“ CV_WINDOW_AUTOSIZE);
namedWindow(“Color Image“ CV_WINDOW_AUTOSIZE);
// 获得最大深度值
int iMaxDepth = streamDepth.getMaxPixelValue(); //iMaxDepth一般
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 4606 2015-11-03 19:34 3D_Cloud_Points\3D_Cloud_Points\3D_Cloud_Points.vcxproj
文件 944 2015-11-03 15:57 3D_Cloud_Points\3D_Cloud_Points\3D_Cloud_Points.vcxproj.filters
文件 1905 2015-11-12 16:13 3D_Cloud_Points\3D_Cloud_Points\Debug\3D_Cloud_Points.log
文件 200 2015-11-12 16:13 3D_Cloud_Points\3D_Cloud_Points\Debug\3D_Cloud_Points.tlog\3D_Cloud_Points.lastbuildstate
文件 922 2015-11-12 16:13 3D_Cloud_Points\3D_Cloud_Points\Debug\3D_Cloud_Points.tlog\cl.command.1.tlog
文件 27330 2015-11-12 16:13 3D_Cloud_Points\3D_Cloud_Points\Debug\3D_Cloud_Points.tlog\CL.read.1.tlog
文件 760 2015-11-12 16:13 3D_Cloud_Points\3D_Cloud_Points\Debug\3D_Cloud_Points.tlog\CL.write.1.tlog
文件 1794 2015-11-12 16:13 3D_Cloud_Points\3D_Cloud_Points\Debug\3D_Cloud_Points.tlog\li
文件 3832 2015-11-12 16:13 3D_Cloud_Points\3D_Cloud_Points\Debug\3D_Cloud_Points.tlog\li
文件 744 2015-11-12 16:13 3D_Cloud_Points\3D_Cloud_Points\Debug\3D_Cloud_Points.tlog\li
文件 715776 2015-11-12 16:13 3D_Cloud_Points\3D_Cloud_Points\Debug\vc120.idb
文件 765952 2015-11-12 16:13 3D_Cloud_Points\3D_Cloud_Points\Debug\vc120.pdb
文件 281263 2015-11-12 16:13 3D_Cloud_Points\3D_Cloud_Points\Debug\源.obj
文件 12024 2015-11-04 11:57 3D_Cloud_Points\3D_Cloud_Points\xyzdata.txt
文件 11848 2015-11-12 16:13 3D_Cloud_Points\3D_Cloud_Points\源.cpp
文件 38535168 2015-11-12 16:26 3D_Cloud_Points\3D_Cloud_Points.sdf
文件 991 2015-11-03 15:52 3D_Cloud_Points\3D_Cloud_Points.sln
..A..H. 31232 2015-11-12 16:26 3D_Cloud_Points\3D_Cloud_Points.v12.suo
文件 112128 2015-11-12 16:13 3D_Cloud_Points\Debug\3D_Cloud_Points.exe
文件 1915964 2015-11-12 16:13 3D_Cloud_Points\Debug\3D_Cloud_Points.ilk
文件 3182592 2015-11-12 16:13 3D_Cloud_Points\Debug\3D_Cloud_Points.pdb
目录 0 2015-11-12 16:13 3D_Cloud_Points\3D_Cloud_Points\Debug\3D_Cloud_Points.tlog
目录 0 2015-11-12 16:13 3D_Cloud_Points\3D_Cloud_Points\Debug
目录 0 2015-11-12 16:13 3D_Cloud_Points\3D_Cloud_Points
目录 0 2015-11-10 21:30 3D_Cloud_Points\Debug
目录 0 2015-11-12 16:26 3D_Cloud_Points
----------- --------- ---------- ----- ----
45607975 26
- 上一篇:OpenCV相机姿态更新
- 下一篇:Masm for Windows237381
相关资源
- glfw-3.2.1源码(需要自行编译)
- 计算机图形学的设计作业。。OpenGl源
- OpenGL绘制3D企鹅
- opengl 实现的机器人行走
- OpenGL 纹理 二重纹理
- Bezier曲面 Coons曲面 B样条曲面绘制(用
- Opengles2.0地球
- 计算机图形学-基于OpenGL的3D迷宫漫游
- 大量Opengl
- Opengl 太阳系
- 用opengl绘制的兔子
- 基于OpenGL的描点绘制Bezier曲线
- opengl天空盒的效果源代码
- Qt5版NeHe OpenGL教程6-10
- 基于opengl下的选择物体局部放大
- OPENGL粒子系统之喷泉
- 3D opengl魔方
- opengles加载3d模型(纹理+光照)
- opengl画的小花
- OpenGL三维图形系统开发与实用技术.
- opengl 立体球体的实现
- loop 细分,结合openGL
- opengl中加载dem方法和贴纹理
- OpenGL写的一个带背景音乐的场景
- opengl房屋设计2
- 知名的斯坦福兔子的三维点云数据,
- OpenGL绘制的鱼轮廓曲线
- 3D OPENGL 飞行游戏源代码
- OpenGL 超酷三维动画DEMO
- OpenGL蓝宝书所需库可直接使用
评论
共有 条评论