freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

kinectopenni學(xué)習(xí)筆記之6(獲取人體骨架并在qt中顯示)(已修改)

2025-08-16 09:45 本頁面
 

【正文】   前言  MS的kinec SDK和OpenNI都提供了人體骨骼跟蹤的算法,人體骨骼跟蹤算法在kinect人體行為識別中非常重要,該識別過程通常被用來作為行為識別的第一步, 比如說,通過定位人體中的骨骼支架,可以提取出人手的部位,從而可以把手的部分單獨(dú)拿出來分析,這樣就達(dá)到了手勢的定位,而后面的手勢識別則可以在剛剛定 位出的領(lǐng)域進(jìn)行處理??偠灾?,一套有效的人體骨架追蹤算法在kinect的一系列應(yīng)用中非常有用,不過MS SDK和OpenNI雖然都提供了該算法類的直調(diào)用,但是其源碼并沒有開放,畢竟這是人家最核心的東東。  開發(fā)環(huán)境:++  實(shí)驗(yàn)說明  在老版本的OpenNI中,要對人進(jìn)行骨架追蹤,需要人先擺出PSI的姿勢,然后系統(tǒng)根據(jù)該姿勢進(jìn)行骨骼校正,待校正完成后才進(jìn)行骨骼的跟蹤,其流程圖可以參考下面的圖:    由圖可以看出,其完成骨骼跟蹤主要分為3個部分,首先需檢測到人體,然后需要固定的PSI姿勢來對人體的姿勢進(jìn)行校正,待姿勢校正完成后,才能進(jìn)行人體骨骼的追蹤。如果程序開發(fā)者用代碼實(shí)現(xiàn)該過程則可以參考hersey的文章透過OpenNI / NITE 分析人體骨架(上)和透過OpenNI / NITE 分析人體骨架(下),作者在這2篇文章詳細(xì)介紹了老版本的人體骨架的OpenNI實(shí)現(xiàn)?! ?,人體骨架追蹤算法更改了不少,其中最大的特點(diǎn)就是骨架跟蹤過程中少了姿勢校正的那一步驟,新版本中只需要人體 站起來就可以進(jìn)行跟蹤了, 使用起來方便很多,程序開發(fā)也簡單不少。另外人體骨骼跟蹤的效果也提高了不少,一旦骨骼追蹤成功后,即使人體沒有保持站立姿勢有 時候也還是可以繼續(xù)跟蹤的。新版本的人體骨骼跟蹤算法使用流程圖如下:    下面來看看程序中的Capability,它不同于前面文章的generator:  在進(jìn)行骨架的判斷和姿態(tài)檢測是需要用到OpenNI延伸的功能,與這種延伸功能相關(guān)的類可以稱作為Capability。在進(jìn)行人體骨骼分析時,user generator需要有支援Skeleton和Pose Detection這2個的capability?! ≡诔绦蛑行枰L制骨骼節(jié)點(diǎn)之間的連線,而節(jié)點(diǎn)的坐標(biāo)和法向都有函數(shù)可以獲得,獲得的坐標(biāo)為真實(shí)世界中的坐標(biāo),畫圖時需要在平面上繪制,因此需要這2個坐標(biāo)系的轉(zhuǎn)換,轉(zhuǎn)換過程用到下面的函數(shù):  XnStatus xn::DepthGenerator::ConvertRealWorldToProjective(XnUInt32 nCount, const XnPoint3D aRealWorld[], XnPoint3D aProjective[])  該函數(shù)表示將深度圖獲取的真實(shí)坐標(biāo)系轉(zhuǎn)換成平面圖形顯示的投影坐標(biāo)系上。第1個參數(shù)表示轉(zhuǎn)換坐標(biāo)點(diǎn)的個數(shù),第2個參數(shù)表示真實(shí)坐標(biāo)系中的坐標(biāo),第3個參數(shù)表示投影坐標(biāo)系下的坐標(biāo)。  本實(shí)驗(yàn)的程序分為3個類和一個主函數(shù),其中2個類的基本部分在前面的文章中已有介紹,只需要更新其部分功能。下面是本實(shí)驗(yàn)中這3個類的設(shè)計(jì)。當(dāng)然這都是參考heresy的博客使用Qt 顯示OpenNI 的人體骨架?! OpenNI類的更新:  因?yàn)樾枰獙θ梭w進(jìn)行骨骼跟蹤,所以需要用到OpenNI的UserGenerator這個類。在private變量一欄增加這個類對象的聲明。然后在類的Init()函數(shù)中使用Create方法產(chǎn)生人體的node。同上一篇博客Kinect+OpenNI學(xué)習(xí)筆記之5(使用OpenNI自帶的類進(jìn)行簡單手勢識別)中 類似,這里的人體骨架校正,跟蹤等都是通過回調(diào)函數(shù)的形式進(jìn)行的,因此還需要在Init()函數(shù)中設(shè)置這個node的檢測到有新人進(jìn)入和骨骼校正完成的回 調(diào)函數(shù)(其實(shí)還有舊人體目標(biāo)離去,骨骼校正開始這2個也可以設(shè)置回調(diào)函數(shù),但在本程序中因?yàn)椴恍枰褂盟鼈儯虼丝梢允÷圆粚懀?老版本的OpenNI是不 允許省略的)。另外,由于色彩節(jié)點(diǎn),深度節(jié)點(diǎn),以及人體檢測節(jié)點(diǎn)都是私有變量,如果該類的對象需要獲取該變量的話不方便,因此在共有函數(shù)部分分別設(shè)置了3 個共有函數(shù)來獲取這3個變量。具體該類的全部代碼參加本文后面的代碼部分?! SkeletonItem類的設(shè)計(jì):  CSkeletonItem這個類主要來完成骨架節(jié)點(diǎn)位置的獲取,以及畫出item中節(jié)點(diǎn)之間的連線,同時也在節(jié)點(diǎn)位置處畫出圓圈代表對應(yīng)節(jié)點(diǎn)的位置?! ≡跇?gòu)造函數(shù)中,設(shè)計(jì)了一個二維的連接表矩陣,矩陣的大小為14*2,即有14條邊,每條邊有2個頂點(diǎn),矩陣中對應(yīng)位置的值表示的是對應(yīng)邊的節(jié)點(diǎn)骨架的標(biāo)號,在OpenNI中人體的骨架節(jié)點(diǎn)共分為15個,手腳共12個,頭部2個,軀干1個。如下圖所示:    程序中對這15個點(diǎn)編了序號,頭部為0, 頸部為1, 軀干為2, 左肩膀?yàn)?, 左手肘為4, 左手腕5,右肩膀?yàn)?,右手肘為7,右手腕為8,左臀為9,左膝蓋為10,左腳跟為11,右臀為12,右膝蓋為13,右腳跟為14?! ≡擃愔行枰貙懙腷oundingRect()函數(shù),函數(shù)中設(shè)置了一個包含15個節(jié)點(diǎn)的最小矩形,因?yàn)楹竺娴睦L圖區(qū)域需要在這個矩形內(nèi)進(jìn)行,很明顯,獲得的這個矩形不是固定大小的,而是根據(jù)人體骨架的位置在不斷變化。大小和位置同時都會發(fā)生改變?! ≈貙懙膒aint()函數(shù)則需要完成2個部分的功能, 第一是畫出骨骼中節(jié)點(diǎn)的位置,用圓圈顯示;第二是畫出2個節(jié)點(diǎn)之間的連線,共14條,這樣通過畫出的連線就可以大概看出人的位置和區(qū)域了。本文是參考的heresy文章不用校正姿勢的NITE ,heresy在設(shè)計(jì)該類的構(gòu)造函數(shù)時,設(shè)計(jì)了個15*2的連接表,個人感覺設(shè)置為14*2比較合理,因?yàn)?5個點(diǎn)剛好由14條線可以連接起來,并不是heresy所說的15條線,其實(shí)它有2條線是重合的?! KinectReader類的更新:  該類是在前面的文章Kinect+OpenNI學(xué)習(xí)筆記之3(獲取kinect的數(shù)據(jù)并在Qt中顯示的類的設(shè)計(jì))中 對應(yīng)類的更新,前面博文中的該類只是完成了深度圖像和顏色圖像的顯示,而在本實(shí)驗(yàn)中,需要完成顯示骨架節(jié)點(diǎn)之間的連線圖,因此該類需要繼續(xù)更新。其實(shí)現(xiàn)過 程主要是獲取視野中人體的個數(shù),對檢測到的每個人體然后調(diào)用CSkeletonItem類中的方法UpdateSkeleton()來更新讀取的節(jié)點(diǎn)坐 標(biāo),因?yàn)橐坏┳鴺?biāo)值發(fā)生了改變,CSkeletonItem類中的boundingRect()內(nèi)容也會更改,從而其Item所在區(qū)域的矩形也會變化,最 后導(dǎo)致paint()函數(shù)的執(zhí)行,在paint()函數(shù)中完成骨骼節(jié)點(diǎn)連線和骨骼節(jié)點(diǎn)的繪圖。  實(shí)驗(yàn)結(jié)果  試驗(yàn)效果的截圖:    藍(lán)色的線表示骨骼節(jié)點(diǎn)之間的連線,黃色的圈表示骨骼節(jié)點(diǎn)?! ?shí)驗(yàn)主要部分代碼及注釋(附錄有實(shí)驗(yàn)工程code下載鏈接地址)::ifndef COPENNI_CLASSdefine COPENNI_CLASSinclude include QtGui/QtGuiinclude iostreamusing namespace xn。using namespace std。class COpenNI{public: ~COpenNI() { ()。//釋放空間 } bool Initial() { //初始化 status = ()。 if(CheckError(Context initial failed!)) { return false。 } (true)。//設(shè)置鏡像 = 640。
點(diǎn)擊復(fù)制文檔內(nèi)容
環(huán)評公示相關(guān)推薦
文庫吧 www.dybbs8.com
公安備案圖鄂ICP備17016276號-1