如何在opengl vs2010 配置上配置openni2

63273人阅读
小斤注:关于OpenNI2.X版本的安装与开发环境配置,请参考
-----------------------------------------------------------------------
&&&&&&Kinect作为新一代的体感设备,小斤就不多介绍咯,微软日前也发布了相应的官方SDK,用以开发Kinect在PC上的应用。但就目前的情况而言,微软的KinectSDK只能在Win
7平台上使用,因此小斤选择了OpenNI作为Kinect开发的第一块踏脚石,它是目前已被广泛使用和认可的开源Kinect开发库。
&&&&&&&首先大家需要下载三样东西:
&&&&&&&第一,OpenNI ,小斤在这里下载:,选择OpenNI
Binaries,注意要下载Development Edition,这样才有Sample可以测试查看。此外,源码也可以在GitHub上看到:
&&&&&&&第二,SensorKinect,它就是Kinect的驱动了,可以在的Bin中找到。
&&&&&&&第三,NITE,这是PrimeSense 提供的中间件,可以分析Kinect读取的资料,输出人体动作等等。目前在,选择OpenNI
Compliant Middleware Binaries就能够下载了。
【1】下载完毕后,先把Kinect放在一边,安装OpenNI。
(小斤安装OpenNI后,安装SensorKinect过程中,会弹出”Please install OpenNI version….”之类的错误,重启后再一次点击SensorKinect安装就解决了。有同学提示说,安装OpenNI的Windows用户一定要用管理员身份跑安装程序才行,没有的话有一部分文件无法写入,会导致之后的错误。)
【2】安装SensorKinect驱动,装完,把Kinect插上,此时系统就会自动开始搜索驱动了,如果没有搜索到,那么需要指定驱动目录了。假设SensorKinect默认安装在默认路径,指定驱动目录C:\ProgramFiles\Prime Sense\Sensor\Driver。
&&&&&&驱动安装成功的话,在设备管理器中,会出现:
【3】安装NITE,装完后,由于NITE定义的320*240分辨率与SensorKinect的640*480不同,这边有个关键步骤,假设安装在默认路径:
&&&&&&从&c:\Program Files\PrimeSense\Sensor\SampleXMLs\NITE\Data\&&里复制所有XML文件到&&c:\ProgramFiles\Prime
Sense\NITE\Data\& 覆盖
  从&c:\ProgramFiles\Prime Sense\Sensor\SampleXMLs\OPENNI\Data&&里复制所有XML文件到&&c:\Program Files\OpenNI\Data& 覆盖
&&&&&&此外,NITE是需要序列号的,但其官网免费提供了一个:0KOIk2JeIBYClPWVnMoRKn5cdY4=
&&&&&&&我们只要将&c:\Program Files\Prime Sense\NITE\Data\&目录下所有配置文件,把Licenses部分替换即可:
  &Licenses&&
&&   &License vendor=&PrimeSense&key=&0KOIk2JeIBYClPWVnMoRKn5cdY4=&/&
  &/Licenses&
【OpenNI】
&&&&&&&如果安装在默认路径下,测试程序可以在C:\Program Files\OpenNI\Samples\Bin\Release下找到,这里小斤使用的是NiViewer.exe和NiSimpleViewer.exe,都是显示深度图,如果运行没问题就可以咯。另外,NiUserTracker这个程序也很有趣,可以跟踪你的人体,前提是它捕捉到你人体后,你做出一个标定动作(举起双手)并维持一段时间。
&&&&&&SimpleViewer:
&&&&&& UserTracker:
&&&&&&& 如果安装一切正常,但这些例子无法显示结果,可以关闭防火墙试试,某些防火墙的设置会阻拦OpenNI的组件读取摄像头。
&&&&&&&同样的,如果安装在默认路径下,测试程序可以在C:\Program Files\OpenNI\Samples\Bin\Release下找到,小斤玩了下StickFigure,这个程序能在一个空间中显示出骨架。
VS开发环境
&&&&&&&要使用VS进行开发的话,需要配置include和lib路径。
&&&&&&&进入VS,点击菜单Tools,进入Options。
&&&&&&&在Projects and Solutions中,选择VC++Directories。
&&&&&&&假设OpenNI安装在默认路径下,则include files加入C:\Program Files\OpenNI\Include,Library files加入C:\ProgramFiles\OpenNI\Lib。
&&&&&&&这样VS的开发环境就配置好了。如果建立了OpenNI的开发项目,则还需要在项目属性——Linker——Input 中的Additional Denpendencies,加入openNI.lib。
&&&&&&&(以上配置在VS2010中有些出入,include和library可能被移到项目属性中配置)
&&&&&&&与OpenNI的Sample使用OpenGL不同,小斤之后的教程范例中,会使用OpenCV进行图像的输入输出,以简化程序(如果你看了OpenNI Sample的代码,会发现代码被OpenGL占了一大半)。大家可以在上找到安装配置方法,小斤就不赘述了。(当然大家也可以直接无视范例中的OpenCV输出部分,把OpenNI读取的数据直接print出来。)
----------------------------------
作者:小斤(陈忻)
本文属于原创文章,如需转载引用请注明原文作者和链接,谢谢。
版权声明:本文为博主原创文章,未经博主允许不得转载。
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:260488次
积分:2146
积分:2146
排名:第10009名
原创:16篇
评论:310条
(3)(1)(4)(1)(2)(1)(1)(1)(1)(2)(1)(2)(1)(3)(1)1083人阅读
&&& 对OpenNI在vs2010下的安装配置先做几点说明:
1.实验中是在64位win7上安装X86的OpenNI2.1
2.debug和release是独立的,所以配置时要对应一致,本实验是在debug下进行的。
&&& 安装过程如下:
1.在上可以下载对应版本的OpenNI,按照提示进行安装。
2.在进行本次实验中,自动建立了OpenNI的环境变量,如果没有自动建立,那么环境变量的值要根据自己实际安装位置来新建变量,见图:
3.打开vs2010,建立一个win32控制台应用程序,选择空项目后,添加一个cpp文件。
4.对项目属性进行配置:
&&&&& 4.1 项目属性--&配置属性---&c/c++---&常规---&附加包含目录,点击右侧的下拉箭头,然后点击编辑,添加& $(OPENNI2_INCLUDE)& 。
&&&&& 4.2 项目属性--&配置属性---&链接器---&常规---&附加库目录,点击右侧的下拉箭头,然后点击编辑,添加& $(OPENNI2_LIB)& 。
&&&&& 4.3 项目属性--&配置属性---&c/c++---&输入---&附加依赖项,点击右侧的下拉箭头,然后点击编辑,添加& OPENNI2.lib& 。
&&&&& 4.4 项目属性--&配置属性---&调试---&工作目录,点击右侧的下拉箭头,然后点击编辑,添加& $(OPENNI2_REDIST)& 。
5.最后在添加的cpp文件中添加示例代码,本代码来自openNI安装文件中,路径为D:\OpenNI2\Samples\SimpleRead 的main.cpp。做了一点修改,
将D:\OpenNI2\Samples\Common下的OniSampleUtilities.h复制到D:\OpenNI2\Include下,所以在包含头文件中一行代码改为&&& #include &OniSampleUtilities.h&
/*****************************************************************************
OpenNI 2.x Alpha
Copyright (C) 2012 PrimeSense Ltd.
This file is part of OpenNI.
Licensed under the Apache License, Version 2.0 (the &License&);
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an &AS IS& BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*****************************************************************************/
#include &stdio.h&
#include &OpenNI.h&
#include &OniSampleUtilities.h&
int main()
Status rc = OpenNI::initialize();
if (rc != STATUS_OK)
printf(&Initialize failed\n%s\n&, OpenNI::getExtendedError());
rc = device.open(ANY_DEVICE);
if (rc != STATUS_OK)
printf(&Couldn't open device\n%s\n&, OpenNI::getExtendedError());
if (device.getSensorInfo(SENSOR_DEPTH) != NULL)
rc = depth.create(device, SENSOR_DEPTH);
if (rc != STATUS_OK)
printf(&Couldn't create depth stream\n%s\n&, OpenNI::getExtendedError());
rc = depth.start();
if (rc != STATUS_OK)
printf(&Couldn't start the depth stream\n%s\n&, OpenNI::getExtendedError());
VideoFrameR
while (!wasKeyboardHit())
rc = depth.readFrame(&frame);
if (rc != STATUS_OK)
printf(&Wait failed\n&);
if (frame.getVideoMode().getPixelFormat() != PIXEL_FORMAT_DEPTH_1_MM && frame.getVideoMode().getPixelFormat() != PIXEL_FORMAT_DEPTH_100_UM)
printf(&Unexpected frame format\n&);
DepthPixel* pDepth = (DepthPixel*)frame.getData();
int middleIndex = (frame.getHeight()+1)*frame.getWidth()/2;
printf(&[%08llu] %8d\n&, (long long)frame.getTimestamp(), pDepth[middleIndex]);
depth.stop();
depth.destroy();
device.close();
OpenNI::shutdown();
&6.执行程序成功,由于未安装设备primesense sensor或Xtion,所以显示如下,可以正常执行。
ps.安装时参考了,谢谢Heresy。
随后购买了Xtion后,可以正常执行: ))
版权声明:本文为博主原创文章,未经博主允许不得转载。
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:4496次
排名:千里之外
(1)(2)(1)(1)(1)(3)(1)您正在使用IE低版浏览器,为了您的IThao123账号安全和更好的产品体验,强烈建议使用更快更安全的浏览器
使用OpenNI2读取oni格式的文件,并将其中的彩色视频,深度视频显示并保存
使用OpenNI2读取oni格式的文件,并将其中的彩色视频,深度视频显示并保存
前几天做人体行为识别的师姐在网上下载了一个以.oni格式保存的数据集,师姐让我帮忙将.oni格式的数据读出并保存为图片序列,以便能用OpenCV/matlab进行处理弄了两三天,终于能完整的将oni文件中的视频数据一帧不少的读出来了,现在将我的方法分享一下。
之前没有接触过OpenNI,这次用到OpenNI是从零开始学的,到今天我也只学了不到4天,有错误的地方还请指教。
首先说一下我对OpenNI2的认识,开始也用过OpenNI1.5但是发现太难,结构不如OpenNI2这种C++风格的清晰,因此,在最初接触了OpenNI几个小时后我就果断的选择了使用OpenNI2,而且OpenNI2的配置也相对比较简单,我用的版本是OpenNI-Windows-x86-2.2,系统是Win7+VS2010。(我的配置是按照这个方法进行的)
由于我仅仅用OpenNI2读取oni格式的数据并保存,下面就只谈与之相关的。(其他的我也不懂)
目前能查到的将oni格式文件中的视频流中每一帧视频都读出来的方法有两种:
一、设置循环。首先读取视频流中的总帧数,然后用这个总帧数设置循环次数每一次读取一帧并保存。
二、设置事件。为视频流添加一个事件,每当视频流更新则读取当前帧并保存。
这两种方法我都用过但是都会出现同样的问题,那就是丢帧,即不能按顺序的一帧不落的将所有帧都读出,究其原因可能是我的电脑太慢了,在视频流下一帧更新之前不能将当前帧读取并保存。
几经挣扎我终于找到的能一帧不落的读完所有帧,那就是要在设置循环的方法中设置视频流的速度,将视频流的速度设置为-1,即只有程序在进行读取视频流的时候视频流才更新,其他时间视频流是不动作的。
另外,程序中的图片显示以及保存都是用的OpenCV,关于OpenCV,网上的资料很多我就不做过多的介绍了,如果有需要还可以用OpenCV将oni文件保存为.avi的视频。
下面在程序以及注释中进行详细的解释
#include &iostream& #include &OpenNI.h& #include &opencv2corecore.hpp& #include &opencv2imgprocimgproc.hpp& #include &opencv2highguihighgui.hpp&
int main() {
//定义oni文件中视频的总帧数以及得到的图片的保存目录
int total = 0;
char* imagefile = &D:\data\data1&;
//初始化OpenNI环境
openni::OpenNI::initialize();
//声明设备并打开oni文件
fromonifile.open(&D:\USER28_CAL11\qw\S13_C11_U26_D3.oni&);
//声明控制对象,这对视频流的控制起到了关键作用
openni::PlaybackControl* pController = fromonifile.getPlaybackControl();
//声明视频流对象以及帧对象
openni::VideoStream streamC
openni::VideoFrameRef frameC
//验证是否有彩色传感器(是否有彩色视频)和建立与设备想关联的视频流
if(fromonifile.hasSensor(openni::SENSOR_COLOR))
if(streamColor.create( fromonifile, openni::SENSOR_COLOR ) == openni::STATUS_OK )
cout&&&建立视频流成功&&&
cerr&&&ERROR: 建立视频流没有成功&&&
system(&pause&);
return -1;
cerr && &ERROR: 该设备没有彩色传感器& &&
system(&pause&);
return -1;
//建立显示窗口
cv::namedWindow(&Image&);
//获取总的视频帧数并将该设备的速度设为-1以便能留出足够的时间对每一帧进行处理、显示和保存
total = pController-&getNumberOfFrames(streamColor);
pController-&setSpeed(-1);
//开启视频流
streamColor.start();
for (int i = 1;i &= ++ i)
//读取视频流的当前帧
streamColor.readFrame(&frameColor);
cout&&&当前正在读的帧数是:&&&frameColor.getFrameIndex()&&
cout&&&当前的循环次数是:
//将帧保存到Mat中并且将其转换到BGR模式,因为在OpenCV中图片的模式是BGR
cv::Mat rgbImg(frameColor.getHeight(), frameColor.getWidth(), CV_8UC3, (void*)frameColor.getData());
cv::Mat bgrI
cvtColor(rgbImg, bgrImg, CV_RGB2BGR);
//将每一帧按顺序帧保存到图片目录下
char imagefullname[255];
char imagenum[50];
sprintf(imagenum,&\%03d.png&,i);
strcpy(imagefullname,imagefile);
strcat(imagefullname,imagenum);
cv::imwrite(imagefullname,bgrImg);
//显示当前帧
cv::imshow(&Image&,bgrImg);
if (cv::waitKey(30) == 27)
//销毁显示窗口
cv::destroyWindow(&Image&);
//关闭视频流
streamColor.destroy();
//关闭设备
fromonifile.close();
//关闭OpenNI
openni::OpenNI::shutdown();
return 0; }
程序运行的截图(数据集是从网上下载的,不要在意视频上那个人,我也不认识)
如果想要读深度数据那么将30和32行的SENSOR_COLOR改成SENSOR_DEPTH
当然由于在OpenNI中的深度数据到OpenCV中要用CV_16UC1来保存并且要想较好的显示还需要下面的转换
const cv::Mat mImageDepth( frame.getHeight(), frame.getWidth(), CV_16UC1, (void*)frame.getData());
int iMaxDepth = stream.getMaxPixelValue();
cv::Mat mScaledD
mImageDepth.convertTo( mScaledDepth, CV_8U, 255.0 / iMaxDepth );
以上,就是我的一些经验,不免有疏漏,请多多包含。
/yemeishu/archive//2856859.html
http://blog.csdn.net/chenxin_130/article/details/8580636
.tw/v6610688/archive//openni_oni_format_file_to_avi_opencv.aspx#feedback
Laravel是一套简洁、优雅的PHP Web开发框架(PHP Web Framework)。它可以让你从面条一样杂乱的代码中解脱出来;它可以帮你构建一个完美的网络APP,而且每行代码都可以简洁、富于表达力。
Hadoop是一个由Apache基金会所开发的分布式系统基础架构。
用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。
Hadoop实现了一个分布式文件系统(Hadoop Distributed File System),简称HDFS。HDFS有高容错性的特点,并且设计用来部署在低廉的(low-cost)硬件上;而且它提供高吞吐量(high throughput)来访问应用程序的数据,适合那些有着超大数据集(large data set)的应用程序。HDFS放宽了(relax)POSIX的要求,可以以流的形式访问(streaming access)文件系统中的数据。
Hadoop的框架最核心的设计就是:HDFS和MapReduce。HDFS为海量的数据提供了存储,则MapReduce为海量的数据提供了计算。
产品设计是互联网产品经理的核心能力,一个好的产品经理一定在产品设计方面有扎实的功底,本专题将从互联网产品设计的几个方面谈谈产品设计
随着国内互联网的发展,产品经理岗位需求大幅增加,在国内,从事产品工作的大部分岗位为产品经理,其实现实中,很多从事产品工作的岗位是不能称为产品经理,主要原因是对产品经理的职责不明确,那产品经理的职责有哪些,本专题将详细介绍产品经理的主要职责
IThao123周刊18951人阅读
&&&&&&最近OpenNI2的推出,小斤也要多给博客除除草了,并在闲暇之余做一些范例程序。从试用几天的经历看,OpenNI2带来了较大的变化:
&&&&【1】程序接口作了较大的更新。具体更新可以查看《OpenNI Migration Guide》,http://www.openni.org/openni-migration-guide/,由于没有向下兼容,因此如果要升级OpenNI2的话,很多代码需要改动了。
&&&&&【2】驱动的变化。使用过OpenNI1.X的童鞋应该了解过SensorKinect这个驱动,但在OpenNI2的环境下,目前Kinect只能使用微软官方的Kinect for Windows SDK来驱动了,料想其它品牌的摄像头,也应该有各自不同的驱动方式吧。使用官方驱动的好处是安装比较方便,Kinect for Windows
SDK中也自带了一些开发工具可以测试使用,坏处也显而易见,由于Kinect for Windows SDK只支持Win7以上的操作系统,让那些想在Linux上玩转Kinect的童鞋失望而归。
&&&&&【3】第三方中间件的支持。在OpenNI1.X的世界里,NiTE一统天下的局面一去不复返了。现在的OpenNI2只负责操作硬件,提供应用数据,与中间件保持独立,在官网上,除了NiTE2之外,你还能找到其它的中间件来使用。
简介就讲到这,让我们开始安装之旅吧!
安装驱动与OpenNI2
&&&&&首先确保操作系统是Win7及以上,到Kinect for Windows SDK官网下载安装包:/en-us/kinectforwindows/develop/overview.aspx。
&&&&& 小斤在安装过程没有遇到任何问题,安装完毕后,插上Kinect就会发现灯亮可驱动。
&&&&& 打开开始菜单中的Kinect for Windows Developer Toolkit,可以找一些Samples来运行,检查是否安装正确,像Face Tracking Visualization都是很有意思的范例。
&&&&& 接着,我们来到http://www.openni.org/下载最新的OpenNI2 SDK进行安装。安装完毕后,可以运行开始菜单的OpenNI2/NiViewer等示例程序进行检查。
VS开发环境
VS开发环境的配置与OpenNI1.X类似,还是配置include与library。
&&&&& 小斤安装的是32位OpenNI2,安装目录位C:\OpenNI2\,在OpenNI2安装完毕后,安装程序自动添加了以下环境变量:(注意,安装64位的话,变量名带有64后缀,配置也相应需要变化)
&&&&& OPENNI2_INCLUDE=C:\OpenNI2\Include\
&&&&& OPENNI2_LIB=C:\OpenNI2\Lib\
&&&&& OPENNI2_REDIST=C:\OpenNI2\Redist\
&&&&& 新建VS C++项目后,右击进入项目属性,进行以下配置:
&&&&【1】Configuration Properties,C/C++,Gerenal,在Additiaonal Include Directories项中添加$(OPENNI2_INCLUDE)。
&&&&【2】Configuration Properties,Linker,Gerenal,在Additiaonal Library Directories项中添加$(OPENNI2_LIB)。
&&&&【3】Configuration Properties,Linker,Input,在Additiaonal Dependencies项中添加$(OPENNI2_LIB)。
&&&&&最后需要注意的是,大家还需要拷贝\OpenNI2\Redist目录下的所有文件到VS的工作目录(如果不通过VS启动,则拷贝到程序执行目录)才可以正确运行,其中包含了OpenNI2启动所需的动态链接库等内容,详见以下解释(Copied
From OpenNI Document):
&&&&&Copy all the files from OpenNI's redist directory (see environment variable &$(OPENNI2_REDIST)& or &$(OPENNI2_REDIST64)&) to your working directory. (The defaults are C:\Program Files\OpenNI2\Redist
or C:\Program Files (x86)\OpenNI2\Redist). Be aware that when you run from command line, the working directory is the directory where the executable can be found, and where you run from Visual Studio the default directory is where the project file (.vcproj,
.vcxproj) can be found.
----------------------------------
作者:小斤(陈忻)
新浪围脖:@小斤陈
本文属于原创文章,如需转载引用请注明原文作者和链接,谢谢。
版权声明:本文为博主原创文章,未经博主允许不得转载。
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:260490次
积分:2146
积分:2146
排名:第10009名
原创:16篇
评论:310条
(3)(1)(4)(1)(2)(1)(1)(1)(1)(2)(1)(2)(1)(3)(1)随笔 - 211

我要回帖

更多关于 vs2010 如何配置eigen 的文章

 

随机推荐