Kinect獲取深度圖和深度數據

做關於深度信息處理的,正好實驗室配備了kinect2代,就想着先用kinect獲取深度信息來處理,之後換其他設備只要有深度信息就直接往後推進就行,不過網上教程雖然多,但是第一次總會栽進坑中,記錄一波,下回重來的時候長個教訓。

  1. 配置參考Kinect SDK
    因爲現在很多版本都相對比較(額,過去式吧)這個是關於kinect v2+Windows10+VS2017(博主和微軟官網都要求的VS2012或者13,但是我電腦之前配的17,是可以用的)。下載Kinect for Windows SDK2.0, 官網下載 直接安裝,安裝的時候不需要連接kinect設備,但是安裝之後一定要重啓電腦(因沒有重啓,之後一直出現錯誤)重啓,重啓,重啓!重要的事情說三遍!!!
  2. 重啓之後插入kinect USB3.0(接口沒有寫3.0啊,就是帶點藍色的那個USB),插上電源,就會自動安裝驅動。在設備管理器裏確定kinect設備已經安裝好了,之後在開始處打開我們剛剛安裝好的SDK Browser v2.0,但是我這裏因爲之前沒有重啓的緣故,在打開Samples C#的時候出現這樣的問題,左下角示例,其實解決方案重啓下電腦就好,但是自己菜啊!
    Kinect not available
  3. SDK配置成功之後,要自己實現編程的話,要配置下。在之前配置opencv成功的那個項目裏繼續配置了kinect VS中配置 我的是VS2017版本沒得問題
  4. 考慮深度信息,在搜索欄裏輸入kinect獲取深度信息,資料很多,代碼也層出不窮。但是很多的都是直接獲深度信息圖,關於深度數據後面再討論,這個說幾個問題。
    A. 有的代碼粘過來會出現“無法打開Nuiapi.h文件”,這是因爲你配置的版本是kinect v2,而那個無法打開的文件是v1系列裏面的頭文件,v2不包含也不是配置的問題了,應該就是不支持,建議換代碼 獲取深度圖代碼代碼測試可以直接出來深度圖,那些黑的地方是無法檢測到的位置,噪聲還是很明顯的。(v1相比於v2更多是調用NUI的方法)
    深度圖
    C. 微軟上關於kinect v2 的官方文檔 官網Kinect v2文檔 關於代碼中的一些函數接口,在我們打開的SDK Browser v2.0也可以直接get到
    在這裏插入圖片描述
    D. Kinect Sensor類(屬性的功能瞭解下),代碼裏主要就是這類在用
    Kinect Sensor類的屬性
    E. 關於HRESULE
    百科上的解釋:函數返回值。32位,其最高位(bit)如果是0表示成功,1表示錯誤。具體參見 MSDN(微軟開發者網絡) 之"Structure of COM Error Codes"說明。我們在程序中如果需要判斷返回值,則可以使用比較運算符號;switch開關語句;也可以使用VC提供的宏: HRESULT hr = 調用組件函數;
    返回值判斷
    F. 有的代碼裏有ConvertMat函數,實現轉換depth圖像到cv::Mat,這是因爲
    在這裏插入圖片描述
    基本都是關於代碼,看文檔知道有哪些接口怎麼用就行
  5. 之前怎麼搜索都是直接深度圖depth map顯示,但我實際上想要獲取到深度數據,也就是物體距離傳感器的深度值Z,在搜索時選擇kinect獲取三維座標
    步驟
    參照代碼,直接運行,可以出來深度圖,在深度圖上點擊就可以出現該位置的三維座標信息
    代碼鏈接
    深度信息獲取
    方括號裏面是像素座標x,y,最後一個就是需要的深度Z值,單位是毫米。大小爲0的地方,是該位置處偵測不到像素點的深度,同時三維座標文本信息保存在相應項目文件夾下。要轉化爲世界座標系網上也有很多教程,不過考慮到之後要實現的任務,後面可能會考慮用Unity+Kinect獲取到場景中的每個像素的深度值,再考慮shader實虛實遮擋的可能性。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章