感谢有钱的研究组,可以毫不眨眼买了3台Kinect2,其中一台还是备用的!真是有钱啊。
导师拿到之后就发邮件说,哎,东西到啦咱们试试呗。妈蛋的他们都用Mac和Linux,但是Kinect2的SDK只能用在Win8上,据说之前只能用在Win 8.1上,最近才兼容到了Win8(2014年7月14日). 于是这个任务就落在我身上了,因为只有我的个人电脑上用Win8,而且如果必须要用Win8.1他们还必须经过IT部门去买,但是我却可以直接弄到Win8.1,怎么弄到你懂的。于是导师对我嘿嘿一笑:“我就把Kinect放你这里了啊,你看着弄吧。”
查了查也没有在网上找到相应的例子,看到一个外国红色社会主义友人写的博客介绍 http://www.kinectingforwindows.com/2014/03/03/gen-ii-kinect-basics-overview/ 很系统很全面啊,但是我只想拿到depth和color图像,其它不关心啊,于是自己弄吧。
首先,下载最新的Kinect 2 SDK http://www.microsoft.com/en-us/kinectforwindows/develop/downloads-docs.aspx
下载之后不要插入Kinect,最好也不用插入除了键盘鼠标以外的其它USB设备,然后安装SDK,安装完成之后插入Kinect,会有安装新设备的提示。安装完成之后可以去“开始”那里找到两个新安装的软件,一个是可以显示Kinect深度图,另外一个软件展示SDK中的各种例子程序。
进入SDK的安装目录,可以找到sample这个文件夹,里面是四种语言编写的例子,其中native是C++的,managed是C#的,还有另外两种语言不熟悉,我就熟悉C++,反正只是试试的,就用C++了。
这里只是获取深度和彩色图像,所以只用到 BasicDepthh 和 BasicColor 两个例子,因为要结合OpenCV显示保存图像,所以我就把例子中的代码抽离出来了。各位请看我生拉硬刨出来的代码:
#include "config.h"
#include "stdafx.h"
//#include "DepthBasics.h"
// 转换depth图像到cv::Mat
cv::Mat ConvertMat(const UINT16* pBuffer, int nWidth, int nHeight, USHORT nMinDepth, USHORT nMaxDepth)
{
cv::Mat img(nHeight, nWidth, CV_8UC3);
uchar* p_mat = img.data;
const UINT16* pBufferEnd