我的开发环境:Windows8.1 x64, VS2012。
在配置环境之前,当然要先安装SDK,下载Kinect for Windows SDK 2.0(http://www.microsoft.com/en-us/download/details.aspx?id=44561),其实在使用Kinect V2之前就要先把SDK安装好。注意在安装SDK时不要同时连接Kinect V2,不然可能会失败。PS:网上都这么说,我没这样试过,有兴趣的童靴可以试试 :P。
安装完之后运行“SDK Browser(Kinect for Windows)”,Run “Kinect Configuration Verifier” 即可出现该电脑的验证结果(看该电脑是否可以正常使用Kinect V2),我的电脑有三个项存有疑问,这个只能真正连接Kinect才知道能不能用,后面事实证明没问题,可以正常使用。至于那个打红叉的项是因为我还没有连接Kinect。
接着就和OpenCV配置VC++环境差不多,但这个Kinect V2好像不需要配置系统环境变量,我没有配置系统环境变量也能正常使用。先新建工程,然后在“属性管理器”中右键“添加新项目属性表”(方便一次配置,多次使用,以后再使用只要在相应项目下右键“添加现有属性表”即可)。
在安装Kinect for Windows SDK 2.0时,会自动在系统环境变量中添加
变量名 | 变量值 |
---|---|
KINECTSDK20_DIR | C:\Program Files\Microsoft SDKs\Kinect\v2.0_1409\ |
其实Kinect for Windows SDK 2.0默认的安装目录就是C:\Program Files\Microsoft SDKs\Kinect\v2.0_1409\。
接下来就是真正的环境配置了:
选中“VC++目录”,
“可执行文件目录”中添加:
$(KINECTSDK20_DIR)\bin
或
C:\Program Files\Microsoft SDKs\Kinect\v2.0_1409\bin
“包含目录”中添加:
$(KINECTSDK20_DIR)\inc
或
C:\Program Files\Microsoft SDKs\Kinect\v2.0_1409\inc
“库目录”中添加:
$(KINECTSDK20_DIR)\Lib\x86
或
C:\Program Files\Microsoft SDKs\Kinect\v2.0_1409\Lib\x86
选中“链接器”
“附加库目录”中添加:
$(KINECTSDK20_DIR)\Lib\x86
或
C:\Program Files\Microsoft SDKs\Kinect\v2.0_1409\Lib\x86
“链接器” –> “输入”
“附加依赖项”中添加:
Kinect20.lib
最后附测试程序:
#include <Kinect.h> // 使用Kinect
#include <iostream>
void kinectTest()
{
IKinectSensor *mySensor = nullptr;
GetDefaultKinectSensor(&mySensor); // 获取传感器
mySensor->Open(); // 打开感应器
// ---------------------获取深度数据--------------------------------------
IDepthFrameSource *mySource = nullptr;
mySensor->get_DepthFrameSource(&mySource); // 获取深度数据
int height = 0, width = 0;
IFrameDescription *myDescription = nullptr;
mySource->get_FrameDescription(&myDescription); // 获取深度数据的分辨率
myDescription->get_Height(&height);
myDescription->get_Width(&width);
myDescription->Release();
myDescription = nullptr;
IDepthFrameReader *myReader = nullptr;
mySource->OpenReader(&myReader); // 打开深度数据的Reader
int times = 100;
IDepthFrame *myFrame = nullptr;
cv::Mat temp(height, width, CV_16UC1);
cv::Mat img(height, width, CV_8UC1);
while (times)
{
if (myReader->AcquireLatestFrame(&myFrame) == S_OK) //
{
UINT size = 0;
UINT16 *buffer = nullptr;
myFrame->AccessUnderlyingBuffer(&size, &buffer);
std::cout << times << "\t"<< buffer[width*(height/2) + width/2] << std::endl;
times--;
myFrame->Release();
/* myFrame->CopyFrameDataToArray(height*width, (UINT16 *)temp.data);
temp.convertTo(img, CV_8UC1, 255.0 / 4500);
imshow("Depth Map", img);
myFrame->Release();
myFrame = nullptr;*/
}
if (cv::waitKey(30) == VK_ESCAPE)
{
break;
}
}
myReader->Release();
myReader = nullptr;
mySource->Release();
mySource = nullptr;
mySensor->Close();
mySensor->Release();
mySensor = nullptr;
}
运行之后,若配置成功则会在控制台界面输出深度图中心点的深度信息,如下图:
参考资料
[1] Kinect for Windows V2 SDK+ VS2012 环境搭建(http://blog.csdn.net/glb562000520?viewmode=contents)
[2] Kinect For Windows V2开发日志一:开发环境的配置(http://www.cnblogs.com/xz816111/category/786456.html)