您的位置:首页 > 其它

kinect for windows sdk 安装与配置

2015-05-16 22:22 501 查看
        原文来自<小华编程网>:kinect for windows sdk 安装与配置

        我的设备:kinectV1

一.准备文件

        kinect for windows sdk v1.8(这是kinectV1支持的最新sdk)

        Kinect for Windows Developer Toolkit v1.8 (这是sdk的一个工具箱,里面有很多丰富的例子。可以不安装,推荐安装)

二.安装

        拔掉kinect,安装kinect  for windows sdk,再安装 Kinect for Windows Developer Toolkit v1.8

三.检测驱动

        插上kinect,跑Developer Toolkit里面的任意例子,正常说明kinect设备能驱动了,反之没有。如果没有安装Kinect for Windows Developer Toolkit v1.8就跳过这一步。

四.配置vs(我的环境:vs2013,C++开发)

       用vs新建一个win32控制台应用程序,附加选项选空项目,添加一个cpp文件到项目。

       vs中打开:视图-其他窗口-属性管理器,打开属性管理器->项目->Debug|Win32->Microsoft.Cpp.Win32.userDirectories的属性,添加下列文件(根据自己安装SDK的目录的情况添加)

       1.  在包含目录中添加:C:\Program Files\Microsoft SDKs\Kinect\v1.8\inc

       2 . 在vc++库目录中添加:C:\Program Files\Microsoft SDKs\Kinect\v1.8\lib\x86

       3 . 在链接器->输入中添加:Kinect10.lib

       跑下面的代码,实时显示彩色数据,运行正常说明配置正确,反之配置有问题

       注: 我这里用了opencv(一个图像识别库),opencv是开发kinect基础程序必备的库,安装opencv参考这里 : http://blog.csdn.net/poem_qianmo/article/details/19809337/

#include<Windows.h>
#include<NuiApi.h>
#include <opencv2/opencv.hpp>
#include"iostream"
using namespace std;
using namespace cv;

int main()
{

//初始化NUI
HRESULT hr = NuiInitialize(NUI_INITIALIZE_FLAG_USES_COLOR);
if (FAILED(hr))
{
cout << "error!Cannot initialize the kinect!" << endl;
return -1;
}

//定义事件
//创建读取下一帧的信号事件句柄,控制kinect是否可以读取下一帧的数据
HANDLE nextColorEvent = CreateEvent(NULL, TRUE, FALSE, NULL);
//保存图像数据流的句柄,用于提取数据
HANDLE colorStreamHand = NULL;

hr = NuiImageStreamOpen(NUI_IMAGE_TYPE_COLOR, NUI_IMAGE_RESOLUTION_1280x960, 0, 2, nextColorEvent, &colorStreamHand);
if (FAILED(hr))
{
cout << "Cannot open the image stream" << endl;
NuiShutdown();
return -2;
}

Mat image;
image.create(960, 1280, CV_8UC3);
namedWindow("colorImage", CV_WINDOW_AUTOSIZE);

while (1)
{
const NUI_IMAGE_FRAME * pImageFrame = NULL;

//无限等待数据,等到后返回
if (WaitForSingleObject(nextColorEvent, INFINITE) == 0)
{
//读取数据
hr = NuiImageStreamGetNextFrame(colorStreamHand, 0, &pImageFrame);
if (FAILED(hr))
{
cout << "cannot get color image" << endl;
NuiShutdown();
return -1;
}

INuiFrameTexture * pTexture = pImageFrame->pFrameTexture;
NUI_LOCKED_RECT LockedRect;

//锁定数据
pTexture->LockRect(0, &LockedRect, NULL, 0);

//判断数据是否有效
if (LockedRect.Pitch != 0)
{
//将数据转换为OpenCV的Mat格式
for (int i = 0; i<image.rows; i++)
{
uchar *ptr = image.ptr<uchar>(i);  //第i行的指针

//每个字节代表一个颜色信息,直接使用uchar
uchar *pBuffer = (uchar*)(LockedRect.pBits) + i * LockedRect.Pitch;
for (int j = 0; j<image.cols; j++)
{
ptr[3 * j] = pBuffer[4 * j];  //内部数据是4个字节,0-1-2是BGR,第4个现在未使用
ptr[3 * j + 1] = pBuffer[4 * j + 1];
ptr[3 * j + 2] = pBuffer[4 * j + 2];
}
}
imshow("colorImage", image); //显示图像
}
else
{
cout << "Buffer length of received texture is bogus\r\n" << endl;
}

//解锁
pTexture->UnlockRect(0);
//释放本帧,等待下一帧
NuiImageStreamReleaseFrame(colorStreamHand, pImageFrame);
}

if (cvWaitKey(20) == 27)
break;
}

NuiShutdown();
return 1;

}
        如果程序能正常显示,说明安装和配置都正常的

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  kinect