我的開發環境: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)