kinect for windows sdk 安装与配置

        原文来自<小华编程网>: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;

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

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值