1. 程式人生 > >Kinect for Windows SDK v2.0 開發筆記 (四)玩家索引與綠屏技術

Kinect for Windows SDK v2.0 開發筆記 (四)玩家索引與綠屏技術

(轉載請註明出處)

使用SDK: Kinect for Windows SDK v2.0 public preview

CSND部落格出現了已經發布了,修改了一個字就變成“待稽核”狀態導致慢更了,

不過反正幾乎沒人看也就影響為0啦。

這次說的是Kinect的玩家索引(BodyIndex)。

Kinect用一個位元組表示當前深度座標的玩家編號。目前最大支援6人,已經是非常不錯了,這個“6”是一個巨集定義

#define BODY_COUNT 6
支援6人索引及6人骨骼跟蹤,1代支援6人索引但是隻支援2人骨骼跟蹤,可見USB3.0的功勞。

獲得的位元組流中,0x00表示0號玩家,0x01表示1號,直到0x05這6名玩家索引,沒有玩家則是用 0xFF表示。請注意,

玩家索引是隨機分配的,不是隻有一位玩家就編號是0x00。不過經測試,貌似一位玩家用0x00表示的機率要大些。

這次視覺化演算法就簡單了,6名玩家使用3位元位即可表示,剛好RGB三種3顏色,所以就用下面程式碼:

        for (UINT i = 0; i < nBufferSize; ++i){
            pBGRXBuffer[i].rgbBlue = pBuffer[i] & 0x01 ? 0x00 : 0xFF;
            pBGRXBuffer[i].rgbGreen = pBuffer[i] & 0x02 ? 0x00 : 0xFF;
            pBGRXBuffer[i].rgbRed = pBuffer[i] & 0x04 ? 0x00 : 0xFF;
            pBGRXBuffer[i].rgbReserved = 0xFF;
        }

這樣,0x00號就是白色,0xFF就是黑色,方便觀看。請注意,Kinect的核心演算法基於深度影象,

所以獲得的玩家索引的大小也是與深度影象大小一致,同上節,方法名差不多,“DepthFame”改為"BodyIndexFrame"就差不多了。

效果如下:


可以看到在近距離,深度影象解析度大於手指,沒準微軟在以後近景模式中會提供官方的十指跟蹤。

當然大家自己可以利用OpenCV基於深度影象實現手指位置的跟蹤。

看一下這個影象,如果與彩色影象像相結合,就可以把人物將彩色影象中“分離”出來,這個有點像電影電視

中的“色鍵”,在背景使用綠色或者藍色影象,後期處理把這些背景色移除。在這就成為綠屏技術吧。

演算法大致如下:

這個點索引為0xFF就把畫素置為空(0x00000000),否則置為在這個點彩色幀相應位置。

那麼怎麼獲取“這個點彩色幀相應位置”呢?Kinect SDK提供了一個座標對映物件。是的,居然是物件,

而不是一個函式搞定的事發火

還有就是隻要是關於深度資料的座標對映,是要提供源資料(即深度資料)的。

原來不是一個簡單的f(x)啊。

座標對映提供非常多的對映方法,像深度座標對映彩色座標,彩色座標對映深度座標,詳細的情檢視官方文件

還有一點需要注意,就是可能會出現座標對映改變的情況,比如彩色幀大小從1080P變成720P。

所現在我們需要同時開啟彩色資料流,深度資料流已經玩家索引資料流。同步這個流不是一個簡單的事。

畢竟我們不知道什麼流先到,什麼流後到。於SDK提供一個“復源幀”物件,將多個數據流封到一起,用起來非常方便。

使用IKinectSensor::OpenMultiSourceFrameReader(DWORD, IMultiSourceFrameReader **)打開復源幀,比如:

        hr = m_pKinect->OpenMultiSourceFrameReader(
            FrameSourceTypes::FrameSourceTypes_Color | 
            FrameSourceTypes::FrameSourceTypes_BodyIndex |
            FrameSourceTypes::FrameSourceTypes_Depth,
            &m_pMultiSourceFrameReader
            );
打開彩色資料流+深度資料流+玩家索引流,使用方法和單源幀差不多,不過使用時要獲取你需要的單源幀引用,

比如IMultiSourceFrame::get_ColorFrameReference,IMultiSourceFrame::get_DepthFrameReference等等。詳細的可以看範例。

效果如下:


哎,一個人截圖簡直不方便,就這樣變學姐了。大哭

還有就是提供的範例中,一個解決方案包含了這兩個工程,需要除錯某工程需要右鍵工程--設定啟動項


範例下載地址:點選這裡

相關推薦

Kinect for Windows SDK v2.0 開發筆記 ()玩家索引技術

(轉載請註明出處) 使用SDK: Kinect for Windows SDK v2.0 public preview CSND部落格出現了已經發布了,修改了一個字就變成“待稽核”狀態導致慢更了, 不過反正幾乎沒人看也就影響為0啦。 這次說的是Kinect的玩家索引(B

Kinect for windows SDK 開發

前幾天無意中看到微軟釋出了Kinect for windows sensor,進去看了一下Kinect應用的例子,發現Kinect除了作為xbox360遊戲的外設外還能開發一些很酷的應用,而且微軟也釋出可針對Kinect開發的Kinect for windows SDK1.0正式版本,原本想買一個Kine

Kinect for Windows SDK開發入門(三):基礎知識 下

1. 效能改進     上文的程式碼中,對於每一個彩色影象幀,都會建立一個新的Bitmap物件。由於Kinect視訊攝像頭預設採集頻率為每秒30幅,所以應用程式每秒會建立30個bitmap物件,產生30次的Bitmap記憶體建立,物件初始化,填充畫素資料等操作。這些物件

Kinect for Windows SDK開發入門(六):骨骼追蹤基礎 上

 Kinect產生的景深資料作用有限,要利用Kinect建立真正意義上互動,有趣和難忘的應用,還需要除了深度資料之外的其他資料。這就是骨骼追蹤技術的初衷,骨骼追蹤技術通過處理景深資料來建立人體各個關節的座標,骨骼追蹤能夠確定人體的各個部分,如那部分是手,頭部,以及身體。骨

Kinect for Windows SDK安裝和環境配置

一、Kinect簡介       Kinect是微軟對XBOX360體感周邊外設釋出的名字,它是一種3D體感攝像機,同時具備動態捕捉、人臉識別、語音識別等功能。它把人體當做控制器,通過人體的動作、語音來操控遊戲。       Kinect感測器包含下面幾項基本裝置:       1. RGB攝像頭——普

深度相機(八)--OpenNI及Kinect for windows SDK的比較

OpenNI(開放自然互動)是一個多語言,跨平臺的框架,它定義了編寫應用程式,並利用其自然互動的API。OpenNI API由一組可用來編寫通用自然互動應用的介面組成。OpenNI的主要目的是要形成一個標準的API,來搭建視覺和音訊感測器與視覺和音訊感知中介軟體通訊的橋樑

Kinect v2(Microsoft Kinect for Windows v2 )配置移動電源解決方案

Kinect v2配置移動電源解決方案 Kinect v2如果用於移動機器人上(也可以是其他應用場景),為方便有效地展開後續工作,為其配置移動電源是十分必要的。 一、選擇移動電源 Kinect v2原裝電源介面卡引數(詳見下圖1所示): 交流輸入: 100V-240V~0.68A, 50/60Hz; 直流輸出

基於Visual C 2010windows SDK fo windows7開發Windows 7的多點觸控特性應用

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

線材檢測V1.0開發筆記

背景 第一代產品V0.0在2017年8月完成,完成後現場反饋說指示效果不好,無法定位至哪一根或哪兩根。要求使用20個燈顯示。 硬體說明 主控板選用Beetle的stm32最小系統板,處理器為STM32F103RBT6,電路圖如下: (備註:1.由於埠緊張,大部分無關

Kinect for Xbox one(v2) + Ubuntu 14.04 +ROS

標籤:       相比於kinect for xbox 360(v1)通過結構光來獲取深度,Kinect for Xbox one(v2) 採用time flight技術,極大改善了深度影象的效能。kinect for xbox 360(v

Git for Windows 2.20.0 釋出,升級到 Git 2.20.0

   Git for Windows 2.20.0 釋出了,Git for Windows 是一個 Windows 版的 Git 客戶端,它提供輕量級的本地工具集,將 Git SCM 的完整功能集引入Windows,同時提供了 GUI。 此版本新功能包括: 升級到 

基於Visual C 2010windows SDK fo windows7開發windows7平臺的tabletp

                基於Visual C++2010與windows SDK fo windows7開發windows7平臺的tabletpc應用(2)-漢字文件手寫軌跡輸入多語言識別大家先看看流程與效果,然後我來講解程式碼,1.VS2010帥氣的啟動畫面2.VS2010的工程畫面3。程式最終生成

基於Visual C++2010windows SDK fo windows7開發windows7平臺的tabletpc應用(2)-軌跡多文件手寫軌跡輸入多語言識別範例

基於Visual C++2010與windows SDK fo windows7開發windows7平臺的tabletpc應用(2)-漢字文件手寫軌跡輸入多語言識別 大家先看看流程與效果,然後我來講解程式碼, 1.VS2010帥氣的啟動畫面 2.VS2010的工程畫面

cocos2d-x 3.0開發筆記---用progressTimer製作血槽

血條經常會用到,沒必要重複編寫浪費時間,這裡用最新版的API寫個,方便以後呼叫。 以下程式碼使用的引擎版本是cocos2d-x 3.0rc0 1.RADIAL Sprite *bgSprite = Sprite::create("red.png"); addChil

cocos2d-x 3.0開發筆記---物理引擎封裝 Physics深入學習

/** 建立一個body mass和moment為預設值 */ static PhysicsBody* create(); /** 建立一個質量為mass的body moment為預設值. */ static PhysicsBody* create(float mass);

cocos2d-x 3.0開發筆記---vector的使用

最近學習別人的原始碼 接觸到Vector這個模板類,發現很好用,特記錄下來,研究一下。 先來看看用法: std::vector<T> v;std是名稱空間 T表示物件的型別,可以是整型int ,字元string,結構struct,或者自定義的類; 我的理解是

Visual Studio 2005中配置Windows Mobile 5.0開發環境

Visual Studio 2005無疑是開發Windows Mobile的最佳工具,其本身就集成了Windows Mobile開發環境,.Net Compact Framework也同時升級到了2.0,只是它自身所帶的模擬器是Windows CE 2003的,有些落後時代了

kinect2.0開發筆記(一)搭建環境

可以參考的開發者博文 首先是Kinect2.0對電腦硬體的要求 1、下載KinectSDKv2.0    下載地址   這個從官網上下載花費的時間巨長啊。博主是真想上傳sdk供讀者下載,可惜CSDN有70M檔案的上限要求。   下載完成後,雙擊即可安裝,博主第一次安裝

Swift4.0開發筆記

目錄 1、ATS配置 2、狀態列全域性變亮白 3、懶載入 4、記憶體洩漏 5、常用的第三方庫 6、反射機制 7、執行時 8、MD5加密 9、聊天介面 10、多執行緒GCD 11、 啟動圖尺寸大小 1、ATS配置 App 網路http請求已被禁止,需要在Info.plist檔案配置。 <key

odoo8.0開發筆記(一):Notepad ++的自動縮排引發python的問題

OpenERP7.0開發筆記系列 問題描述:使用Notepad++編輯python程式時,會發生莫名其妙的問題,程式碼明明都一模一樣,為什麼就是得不到正確結構呢? 原因其實是因為:python對縮排很敏感,一般建議用空格來完成縮排,但是,而Notep