openni2結構簡介

2021-07-31 14:19:59 字數 1028 閱讀 9109

openni框架是一套開源的sdk,用於開發3d感測器的中間層和應用層。

各個感測器需要實現onidriverapi.h中定義的介面,具體實現在openni2/source/drivers目錄下,不同感測器編譯成不同的動態庫。

openni::initialize()用於載入各個感測器的動態庫,並獲得動態庫介面的位址。上層呼叫最終是呼叫到感測器的動態庫中。

下面簡單看下initialize的過程:

1.解析openni.ini

2.openni.ini的drivers;repository指定目錄下的所有感測器動態庫都實現了一組相同的介面(定義在onidriverapi.h)。

對每乙個感測器動態庫,dlopen開啟,獲得動態庫控制代碼,dlsym獲得介面位址,建立driverhandler維護這組介面。

下圖是應用層device::open()的過程:

用到的幾個系統函式說明:

1.int dladdr(void *address, dl_info *dlip)

確定address是否位於構成程序的位址空間的其中乙個載入模組(可執行庫或共享庫)內,如果指定的address在其中乙個載入模組的範圍內,則dl_info的結構成員由dladdr()設定。

struct;

dli_fname:乙個指標,指向包含address的載入模組的檔名。每次呼叫dladdr() 後,該記憶體位置的內容都可能發生更改。

2.void* dlopen( const char * pathname, int mode);

開啟乙個動態鏈結庫,並返回動態鏈結庫的控制代碼。

3.void*dlsym(void*handle,constchar*symbol)

根據動態鏈結庫控制代碼與符號,返回符號對應的位址,可以獲取函式位址也可以獲取變數位址。

談談OpenNI 2初體驗

十 一 談談nite 2手部跟蹤在彩色影象上的顯示 在談談nite 2與opencv結合的第乙個程式和談談nite 2與opencv結合的第乙個程式中我們都是在深度影象中對獲得的手部資訊進行處理,但不知道在彩色影象中,手部跟蹤獲得手心座標是怎麼樣的?是否也和深度影象顯示一樣,能夠很好的定位到真正的手...

OpenNI2 和 OpenCV 結合的程式例項

開始之前,讓我們自己開始再熟練熟練openni 2的基本使用,主要包括以下幾個步驟 1.初始化openni環境 openni openni initialize 2.宣告並開啟device裝置 openni device devanydevice devanydevice.open openni a...

OPENNI學習實踐 openni基本結構

在openni裡,使用production node來表示內部的基本單元,這也包括了硬體部分的感應器和openni所提供的功能。也就是說,node是產生資料的接點,利用node產生我們需要去處理的資料,如rgb圖,depth圖等。openni的capality是用來增強中間層和底層感應器的彈性的,這...