Kinect V2 基础教程之彩色图像
生活随笔
收集整理的這篇文章主要介紹了
Kinect V2 基础教程之彩色图像
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
本程序為自己所寫,參考素材包括微軟官方例子和外文資料,自己做了部分的優(yōu)化。解釋的如果有問題,懇請大家指正.
后臺代碼:
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;//一幀圖像的性質(zhì)描述 FrameDescription colorFrameDesc;//枚舉類型,定義彩色幀的格式(共6種)//此處規(guī)定彩色幀格式為Bgra格式:4字節(jié)存儲一個像素點,包含blue,green,red,alpha(即像素點亮度值)ColorImageFormat colorFormat = ColorImageFormat.Bgra;//創(chuàng)建用于顯示圖像的位圖 WriteableBitmap colorBitmap;//用于存放一幀彩色圖像的所有信息(byte 類型,每個元素占一個字節(jié)) byte[] colorBuffer;//一幀彩色圖像的步長(物理意義:此處表示一幀圖像的每一行需占用的字節(jié)個數(shù))(作用:渲染位圖時需要提供圖像的步長)int colorStride;//存放彩色圖像的矩形畫布(作用:渲染位圖時需要提供畫布位置和大小) Int32Rect colorRect;#endregionpublic MainWindow(){InitializeComponent();#region 變量初始化、賦值// 獲取默認的kinect傳感器kinect = KinectSensor.GetDefault();//啟動傳感器 kinect.Open();//確定彩色幀的數(shù)據(jù)類型colorFrameDesc = kinect.ColorFrameSource.CreateFrameDescription(colorFormat);// 創(chuàng)建并返回一個新的讀取對象colorFrameReader = kinect.ColorFrameSource.OpenReader();//觸發(fā)彩色幀事件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字節(jié)//畫布矩形框初始化colorRect = new Int32Rect(0, 0, colorFrameDesc.Width, colorFrameDesc.Height);//計算總共需要多少個字節(jié)才能儲存一幀圖像的所有像素點colorBuffer = new byte[colorStride * colorFrameDesc.Height];//彩色位圖和UI界面圖片控件關(guān)聯(lián)ImageColor.Source = colorBitmap; //即實時的將獲取的彩色幀信息描繪在ImageColor控件中#endregion}#region 處理來自傳感器的彩色幀 事件//彩色幀觸發(fā)事件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;}// 將一幀彩色圖像數(shù)據(jù)以‘colorFormat’格式拷貝放到‘colorBuffer’中 colorFrame.CopyConvertedFrameDataToArray(colorBuffer, colorFormat);}}private void DrawColorFrame(){// 將獲取的一幀彩色圖像數(shù)據(jù)更新到位圖中colorBitmap.WritePixels(colorRect, colorBuffer, colorStride, 0);}#endregion//程序窗口關(guān)閉事件private void Window_Closing(object sender, CancelEventArgs e){// 釋放彩色幀資源if (colorFrameReader != null){colorFrameReader.Dispose();colorFrameReader = null;}//關(guān)閉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>?
轉(zhuǎn)載于:https://www.cnblogs.com/Edison25/p/5536809.html
總結(jié)
以上是生活随笔為你收集整理的Kinect V2 基础教程之彩色图像的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: PHP - 如何解决中文乱码
- 下一篇: Maven-Dependency Mec