Kinect V2 基礎教程之彩色圖像

来源:http://www.cnblogs.com/Edison25/archive/2016/05/28/5536809.html
-Advertisement-
Play Games

本程式為自己所寫,參考素材包括微軟官方例子和外文資料,自己做了部分的優化。解釋的如果有問題,懇請大家指正. 後臺代碼: XAML界面代碼: ...


  本程式為自己所寫,參考素材包括微軟官方例子和外文資料,自己做了部分的優化。解釋的如果有問題,懇請大家指正.

後臺代碼:

using System.ComponentModel;
using System.Windows;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using Microsoft.Kinect;

namespace KinectV2
{
    /// <summary>
    /// MainWindow.xaml 
    /// </summary>
    public partial class MainWindow : Window
    {
        #region 定義變數

        // kinect設備
        KinectSensor kinect;

        //彩色幀讀取
        ColorFrameReader colorFrameReader;

        //一幀圖像的性質描述
        FrameDescription colorFrameDesc;

        //枚舉類型,定義彩色幀的格式(共6種)
        //此處規定彩色幀格式為Bgra格式:4位元組存儲一個像素點,包含blue,green,red,alpha(即像素點亮度值)
        ColorImageFormat colorFormat = ColorImageFormat.Bgra;

        //創建用於顯示圖像的點陣圖
        WriteableBitmap colorBitmap;

        //用於存放一幀彩色圖像的所有信息(byte 類型,每個元素占一個位元組) 
        byte[] colorBuffer;

        //一幀彩色圖像的步長(物理意義:此處表示一幀圖像的每一行需占用的位元組個數)(作用:渲染點陣圖時需要提供圖像的步長)
        int colorStride;

        //存放彩色圖像的矩形畫布(作用:渲染點陣圖時需要提供畫布位置和大小)
        Int32Rect colorRect;

        #endregion


        public MainWindow()
        {
            InitializeComponent();

            #region 變數初始化、賦值

            // 獲取預設的kinect感測器
            kinect = KinectSensor.GetDefault();

            //啟動感測器
            kinect.Open();

            //確定彩色幀的數據類型
            colorFrameDesc = kinect.ColorFrameSource.CreateFrameDescription(colorFormat);

            // 創建並返回一個新的讀取對象
            colorFrameReader = kinect.ColorFrameSource.OpenReader();

            //觸發彩色幀事件
            colorFrameReader.FrameArrived += colorFrameReader_FrameArrived;

            //彩色點陣圖初始化(96,96表示解析度,即96像素/英寸)
            colorBitmap = new WriteableBitmap(colorFrameDesc.Width, colorFrameDesc.Height, 96, 96, PixelFormats.Bgra32, null);

            //圖像步長初始化
            colorStride = colorFrameDesc.Width * (int)colorFrameDesc.BytesPerPixel;//(int)colorFrameDesc.BytesPerPixel = 4,每個像素點占4位元組

            //畫布矩形框初始化
            colorRect = new Int32Rect(0, 0, colorFrameDesc.Width, colorFrameDesc.Height);

            //計算總共需要多少個位元組才能儲存一幀圖像的所有像素點
            colorBuffer = new byte[colorStride * colorFrameDesc.Height];

            //彩色點陣圖和UI界面圖片控制項關聯
            ImageColor.Source = colorBitmap;    //即實時的將獲取的彩色幀信息描繪在ImageColor控制項中

            #endregion
        }

        #region 處理來自感測器的彩色幀 事件

        //彩色幀觸發事件
        void colorFrameReader_FrameArrived(object sender, ColorFrameArrivedEventArgs e)
        {
            //更新彩色幀,然後描繪彩色幀
            UpdateColorFrame(e);
            DrawColorFrame();
        }

        private void UpdateColorFrame(ColorFrameArrivedEventArgs e)
        {
            // 獲取一幀彩色圖像
            using (var colorFrame = e.FrameReference.AcquireFrame())
            {
                if (colorFrame == null)
                {
                    return;
                }
                // 將一幀彩色圖像數據以‘colorFormat’格式拷貝放到‘colorBuffer’中
                colorFrame.CopyConvertedFrameDataToArray(colorBuffer, colorFormat);
            }
        }

        private void DrawColorFrame()
        {
            // 將獲取的一幀彩色圖像數據更新到點陣圖中
            colorBitmap.WritePixels(colorRect, colorBuffer, colorStride, 0);
        }
        #endregion



        //程式視窗關閉事件
        private void Window_Closing(object sender, CancelEventArgs e)
        {
            // 釋放彩色幀資源
            if (colorFrameReader != null)
            {
                colorFrameReader.Dispose();
                colorFrameReader = null;
            }
            //關閉kinect感測器
            if (kinect != null)
            {
                kinect.Close();
                kinect = null;
            }
        }

    }
}

XAML界面代碼:

<Window x:Class="KinectV2.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Closing="Window_Closing" >
    <Grid Width="512" Height="424">
        <Image x:Name="ImageDepth"  />
    </Grid>
</Window>

 


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

-Advertisement-
Play Games
更多相關文章
  • dispatch_once dispatch_once可以保證一段代碼只被執行一次,因此出現之後使用最多的場景就是實現單例。本文來模擬實現dispatch_once的功能。 模擬dispatch_once 直接上代碼 static NSMutableDictionary lockMapping = ...
  • 今天在嘗試使用MediaPlayer播放音樂時出了一個問題,在使用 這行代碼為MediaPlayer設置要播放的音樂地址時,代碼執行到這一行總是會報錯,錯誤信息為:setDataSource failed 一下子就懵逼了,為何會failed沒說啊,在網上查了些資料各種嘗試後沒什麼用,後來改用其中的一 ...
  • 今天跟著黑馬視頻建立一個android app--電話撥號器 首先新建一個android項目 activity_main_xml中的代碼如下: 運行一下: 可以看到佈局出現問題,文字出現重疊,簡單的解決方法如下: 界面如下所示: MainActivity中添加下麵的代碼: 撥打電話後,出現如下異常: ...
  • 使用指定資料庫 use v4base 建一張表 / 小區主檔記錄,要保證與OrgLevelUnit同步 / IF not exists(SELECT OBJECT_NAME (id )FROM sysobjects WHERE xtype = 'U' AND OBJECTPROPERTY (id, ...
  • 索引的基本概念: (1).要理解索引,可以把書作為一個模型類比。一本書里的內容,相當於一張大表存儲的數據,而書前面的目錄就相當於這個表的索引; (2).索引可以擁有獨立的存儲磁碟空間; (3).索引占用的磁碟空間要比表小的多,其主要作用是為了加快對數據的搜索速度; (4).同時可以保證數據的唯一性。 ...
  • 今天在幫客戶做語句優化的時候,突然遇到這樣一個語句,類似下麵的例子(原語句是個update) 例子中使用AdventureWorks數據中的兩個表。 productID 是[Production].[Product] 表的主鍵,在[Purchasing].[PurchaseOrderDetail] ...
  • [epeter@ localhost ~]$ 其中:epeter 是用戶名;localhost 是當前主機名; ~ 破浪號代表當前是用戶目錄( 如果是 / 斜線代表當前是根目錄);$ 代表當前以普通用戶登錄(如果是 # 代表當前以根用戶登錄(root用戶或者具有管理員許可權))。 命令由三個部分組成: ...
  • 註意首先要安裝url重定向模塊 https://www.microsoft.com/zh-CN/download/details.aspx?id=7435 然後在web.config末尾添加如下代碼 <system.webServer> <rewrite> <rules> <rule name="H ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...