Windows-8.1_x64+VS2012+Kinect V2環境配置

我的開發環境:Windows8.1 x64, VS2012。
  在配置環境之前,當然要先安裝SDK,下載Kinect for Windows SDK 2.0http://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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章