Kinect V2入門之數據獲取步驟

来源:https://www.cnblogs.com/mld-code-life/archive/2019/05/19/10891434.html
-Advertisement-
Play Games

在Kinect for windows SDK2.0中,獲取並處理數據源介面步驟如下: Sensor -> Source -> Reader -> Frame -> Data (一)SensorIKinectSensor *pSensor=nullptr; //定義類指針GetDefaultKine ...


在Kinect for windows SDK2.0中,獲取並處理數據源介面步驟如下:

  Sensor -> Source -> Reader -> Frame -> Data

(一)Sensor
IKinectSensor *pSensor=nullptr;          //定義類指針
GetDefaultKinectSensor(&pSensor);  //捕獲感測器
pSensor->Open();                                //調用類函數Open(),打開Kinect
(二)Source
IDepthFrameSource *pFrameSource=nullptr;
pSensor->get_DefrrmeSource(&pFrameSource); //get source 存放在pFrameSource中
(三)
IDepthFrameReader *pReader=nullptr ;            //Source是Kinect端擁有的,需要創建電腦端的介面Reader讀取
pFrameSource->get_OpenReader(&pFrameSource);  //將pFrameSource中的數據讀取到pReader中
(四)Frame
IDepthFrame *pFrame=nullptr ;                    //Frame是真正存儲數據的類,每一次都讓Reader把數據讀到Frame類中
pFrameSource->AcquireLatestFrame(&pFrame) ;  //獲取最新的數據,並且裝入另一個數據幀里。但是這個函數必須要判斷是否返回一個成功值,因為獲取失敗的幾率非常高。
(五)處理數據 

(如何從Frame類中獲得數據,請求Source和創建Reader對於每一個數據類型都是一模一樣的,但從Frame中提取信息則各有不同)
pFrame->AccessUnderlyingBuffer( &uBufferSize , &pBuffer)
//取到數據幀後,通過AccessUnderlyingBuffer()這個函數將數據複製到數組,這個函數有兩個參數,
第一個是個記錄大小的變數,第二個是個接受數據的數組指針,傳入後會分別返回數組的大小以及數據。
它傳入數組的數據代表的是那一個像素點上的物體距離感測器的位置。

讀取深度信息 示例代碼:

 1 #include<iostream>
 2 #include"Kinect.h"
 3 using namespace std;
 4 
 5 int  main()
 6 {
 7     IKinectSensor *pSensor = nullptr;  //1.get default Sensor
 8     GetDefaultKinectSensor(&pSensor);
 9 
10     pSensor->Open(); //open sensor
11 
12     IDepthFrameSource *pFrameSource = nullptr; //2.Get frame source
13     pSensor->get_DepthFrameSource(&pFrameSource);
14 
15     IDepthFrameReader* pFrameReader = nullptr;//3.get frame reader
16     pFrameSource->OpenReader(&pFrameReader);
17 
18     size_t uFrameCount = 0;
19     while (uFrameCount < 100) {        // cirlce of 100 times
20     //4.get lastest frame
21         IDepthFrame *pFrame = nullptr;
22 
23         if (pFrameReader->AcquireLatestFrame(&pFrame) == S_OK) {
24 
25             int iWidth = 0, iHeight = 0;
26             IFrameDescription *pFrameDescription = nullptr;
27             pFrame->get_FrameDescription(&pFrameDescription);
28             pFrameDescription->get_Width(&iWidth);
29             pFrameDescription->get_Height(&iHeight);
30             pFrameDescription->Release();
31             pFrameDescription = nullptr;
32 
33             //get image buffer
34             UINT uBufferSize = 0;
35             UINT16* pBuffer = nullptr;
36             pFrame->AccessUnderlyingBuffer(&uBufferSize, &pBuffer);
37 
38             //output depth value
39             int x = iWidth / 2, y = iHeight / 2;
40             size_t idx = x + iWidth * y;
41             cout << pBuffer[idx] << endl;
42 
43             pFrame->Release();
44             pFrame = nullptr;
45 
46             ++uFrameCount;
47 
48         }
49     }
50 
51     pFrameReader->Release();
52     pFrameReader = nullptr;
53 
54     // 2b. release Frame source
55     pFrameSource->Release();
56     pFrameSource = nullptr;
57 
58     // 1c. Close Sensor
59     pSensor->Close();
60 
61     // 1d. Release Sensor
62     pSensor->Release();
63     pSensor = nullptr;
64 
65     return 0;
66 }

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Python中類的聲明,使用,屬性,實例屬性,計算屬性及繼承,重寫 ...
  • Map的繼承關係: Map介面的常用實現類: 1、HashMap、Hashtable(t是小寫) HashMap不是線程安全的,key、value的值都可以是null。 Hashtable是線程安全的,key、value的值都不能是null。 HashMap、Hashtable都是無序的。 如果要使 ...
  • TableGo是基於資料庫的代碼自動生成工具,可以根據資料庫表結構自動生成JavaBean、生成MyBaits的Mapper映射配置文件、生成資料庫設計文檔、生成前後端代碼等,更重要的是可以根據每個項目的不同開發框架編寫自定義模板生成各模塊增刪查改的前後端代碼,讓開發人員的開發效率提高60%以上,... ...
  • Consumer是java8提供的函數式介面之一,意思為消費者,接受參數而不返回值 方法示例 這個是錯誤示例,(a) -> a * 2是編譯不通過的,因為Consumer是沒有返回值的,lambda一行的時候預設帶return Bad return type in lambda expression ...
  • 進行JavaWeb開發,我們總共需要5個步驟:JDK的安裝與配置;Tomcat的安裝;EclipseEE的安裝與配置;創建工程;編寫代碼並運行。安裝的三個軟體在版本和適用構架上要一致。當JDK是32位時,Tomcat和EclipseEE也都必須是32位的軟體。在版本的選擇上JDK8版本可以使用Tom... ...
  • Map是雙列集合的根介面,用於存儲具有映射關係的數據。 根據key來區分每一項、獲取對應的value,所以key不能重覆。 key、value都可以是任意類型的數據。 Map提供了一個內部類Entry用來封裝鍵值對,一個鍵值對就是一個Entry實例。 Map的常用方法(所有子類都可以直接使用): v ...
  • 現象: 報錯:Exception in thread "main" com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure 解決辦法: 更換 mysql-connector-java-8.0. ...
  • 一、單體架構的問題 微服務為什麼會出現?在學習Springboot的時候知道Springboot極大的簡化了我們的開發,我們可以快速的進行業務開發,Springboot單體應用在項目的開發初期能夠滿足我們需求,這種單體架構優點非常的明顯: 容易測試:本地就可以起完整的系統,不需要外部依賴。 容易開發 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...