Upload
ingchyuan-wu
View
581
Download
0
Embed Size (px)
Citation preview
9
Color Basics-WPF 範例程式
執行「Kinect for Windows SDK v2.0 \ SDK Browser
(Kinect for Windows) v2.0」→「Color Basics-WPF」
→「Run」
執行 Install則可將整個專案安裝於指定目錄,做為
自行開發程式的參考,或以此程式當樣本,修改為自
己想要的功能。
12
Kinect01 程式顯示 Kinect One 持續傳入的彩色影像
(1920x1080 @30fps),提供影像分色處理選項與影像
存檔功能,並顯示已存檔數目。
開發工具為Windows 10 加上 Visual Studio 2015 環境
之 C# + WPF + Kinect for Windows SDK 2.0
程式執行時需將 Kinect One 接上電腦之 USB 3.0 插
槽
Kinect01 目標、開發、執行
13
建議將螢幕解析度調為 1920x1080或以上
Kinect01專案下載 (Kinect01.zip)
https://onedrive.live.com/redir?resid=AB6DA2015C8C4A60!2307&
authkey=!ABC9MN8j_jtzCfU&ithint=file%2czip
14
視窗大小為 1440x810
一個 Image控制項顯示 1280x720 @30fps 即時影像
四個 Button控制項分別做為影像分色處理的選項
(Red、Green、Blue、Color)
一個 Button控制項自動將畫面影像以 jpg 格式,存
檔於 Kinect01 專案之與 Kinect01.exe 相同檔案夾,檔
名預設為 color000001.jpg、、、color999999.jpg。
Kinect01 畫面規劃
15
一個 Label控制項顯示已儲存影像檔案數目
利用WriteableBitmap類別配置記憶體區塊,將記憶
體區塊的影像即時顯示在 Image控制項
每個 Kinect One 傳入的彩色影像 (Frame),存入指定
的記憶體區塊,經影像處理後,傳至 Image 控制項
呈現出來。
一個 KinectSensor類別的物件代表一台 Kinect One
(一台電腦只能接一台設備)
16
視窗大小為 1440x810 (Kinect01)
Image控制項顯示 1280x720圖像 (ColorImage)
Button控制項操控紅色影像 (Red)
Button控制項操控綠色影像 (Green)
Button控制項操控藍色影像 (Blue)
Button控制項操控回復彩色影像 (Color)
Button控制項操控影像存檔 (Save)
Label控制項顯示已存檔影像數目 (Count)
17
建立 Kinect01 方案
起動 Visual Studio Professional 2015
點選「檔案(F)」→「新增(N)」→「專案(P)…」→「Visual
C#」→「WPF 應用程式」
「名稱(N)」填入 Kinect01 (原來是WpfApplication1)
「位置(L)」利用瀏覽(B)… 選定目錄
點選「確定」
Kinect01 實作
23
加入Microsoft.Kinect組件使 SDK 可以被專案使用
在『參考』處按右鍵,點選『加入參考(R)』
點選「擴充功能」→挑選「Microsoft.Kinect 2.0.0.0」
→ CheckBox 處點一下使出現打勾
點選「確定」
30
將Window 屬性修改為
名稱:Kinect01
FontSize:20
Height:810
ResizeMode:CanMinimize
Title:Kinect ColorFrame
Width:1440
程式執行時,視窗只可縮至最小,無法放大
31
將 Kinect01 視窗加入一個 Image控制項
滑鼠在工具箱的 Image點一下,然後在視窗設計區點一下
名稱:ColorImage
將 ColorImage屬性修改為
Height:720
Margin:70 0 0 0
Width:1280
32
將 Kinect01視窗加入四個 Button控制項
名稱:Red
將 Red屬性修改為
Background:單色筆刷 (R:255 G:0 B:0 A:100%)
Content:RED
FontSize:32
Height:45
Margin:70 725 0 0
Width:150
33
名稱:Green
將 Green屬性修改為
Background:單色筆刷 (R:0 G:255 B:0 A:100%)
Content:GREEN
FontSize:32
Height:45
Margin:250 725 0 0
Width:150
34
名稱:Blue
將 Blue屬性修改為
Background:單色筆刷 (R:0 G:0 B:255 A:100%)
Content:BLUE
FontSize:32
Height:45
Margin:430 725 0 0
Width:150
35
名稱:Color
將 Color屬性修改為
Background:漸層筆刷 (放射漸層 R:160 G:160 B:80
A:100%)
Content:COLOR
FontSize:32
Height:45
Margin:610 725 0 0
Width:150
36
將 Kinect01視窗加入一個 Button控制項
名稱:Save
將 Save屬性修改為
Background:單色筆刷 (R:180 G:100 B:220 A:100%)
Content:SAVE
FontSize:32
Height:45
Margin:860 725 0 0
Width:150
37
將 Kinect01視窗加入一個 Label控制項
名稱:Count
將 Count屬性修改為
Background:單色筆刷 (R:210 G:140 B:70 A:100%)
Content:存檔影像:000000
FontSize:32
Height:45
Margin:1040 725 0 0
Width:310
39
滑鼠雙擊 Kinect01 事件視窗的 Loaded右邊空白欄位
此動作表示專案要處理Window 的 Loaded事件,Visual Studio 系統自動為我們指定 Loaded 事件的處理方法為 Kinect01_Loaded( ) 函式
雙擊之後系統自動產生
40
滑鼠雙擊 Kinect01 事件視窗的 Unloaded右邊空白欄位
此動作表示專案要處理Window 的 Unloaded事件,Visual Studio 系統自動為我們指定 Loaded 事件的處理方法為 Kinect01_Unloaded( ) 函式
雙擊之後系統自動產生
41
滑鼠雙擊 Red事件視窗的 Click右邊空白欄位
滑鼠雙擊 Green事件視窗的 Click右邊空白欄位
滑鼠雙擊 Blue事件視窗的 Click右邊空白欄位
滑鼠雙擊 Color事件視窗的 Click右邊空白欄位
滑鼠雙擊 Save事件視窗的 Click右邊空白欄位
Red的 Click事件處理函式為 Red_Click( )Green的 Click事件處理函式為 Green_Click( )
Blue的 Click事件處理函式為 Blue_Click( )Color的 Click事件處理函式為 Color_Click( )Save的 Click事件處理函式為 Save_Click( )
46
視窗載入 (Loaded事件)
視窗關閉 (Unloaded事件)
Visual Studio 2015 自動幫我們產生。視窗Loaded和 Unloaded時要做的事情,就寫在此二方法(函式)內
54
輸入 colorFrameReader.FrameArrived += 接著按 Tab鍵
自動產生 ColorFrameReader_FrameArrived函式
每一個 RGB 影格 (Frame) 傳入時,會觸發一次FrameArrived事件,希望程式對一個 RGB 影格做甚麼處理,就寫在ColorFrameReader_FrameArrived 函
式裏,每秒觸發 30 次。
65
Kinect RGB 影像串流相關類別
KinectSensor類別的物件代表一台 Kinect One,以
GetDefault( ) 方法連接Kinect One,以 Open( )方法啟動
Kinect One,以 Close( )方法停止 Kinect One
新的影格資料送達電腦時觸發 ColorFrameReader的
FrameArrived事件,可利用事件傳遞的參數
ColorFrameArrivedEventArgs 物件取得影格資料
(ColorFrame物件)
Kinect01 解說
66
KinectSensor 類別
https://msdn.microsoft.com/en-
us/library/windowspreview.kinect.kinectsensor.aspx?cs-save-
lang=1&cs-lang=csharp#code-snippet-1
KinectSensor類別的物件代表一台 Kinect One,以
GetDefault( ) 方法連接 Kinect One,以 Open( )方法啟動
Kinect One,以 Close( )方法停止 Kinect One
ColorFrameSource屬性取得彩色影像來源
67
ColorFrameReader 類別
https://msdn.microsoft.com/en-
us/library/windowspreview.kinect.colorframereader.aspx?cs-
save-lang=1&cs-lang=csharp#code-snippet-1
ColorFrameReader類別的物件操控彩色 (RGB)影像串流
FrameArrived事件被觸發當彩色影像送達時
68
ColorFrame 類別
https://msdn.microsoft.com/en-
us/library/windowspreview.kinect.colorframe.aspx
ColorFrame類別的物件儲存彩色 (RGB) 影像串流
CopyConvertedFrameDataToArray( ) 方法將原始彩色影像
依指定的格式轉換後,存入指定的陣列
69
FrameDescription 類別
https://msdn.microsoft.com/en-
us/library/windowspreview.kinect.framedescription.aspx
ColorFrameReader類別的物件描述彩色 (RGB)影像的性質
BytesPerPixel屬性描述每個 Pixel 有幾個 Byte
Height屬性描述影像高度的 Pixel 數
Width屬性描述影像寬度的 Pixel 數
70
ColorFrameArrivedEventArgs 類別
https://msdn.microsoft.com/en-
us/library/windowspreview.kinect.colorframearrivedeventar
gs.aspx
ColorFrameReader的 FrameArrived事件,傳遞的參數就是
ColorFrameArrivedEventArgs 類別的物件,含有影格資料
(ColorFrame物件)
FrameReference屬性取得彩色影像來源的參照
71
ColorImageFormat 列舉
https://msdn.microsoft.com/en-
us/library/windowspreview.kinect.colorimageformat.aspx
Bgra 成員:一個像素佔用 4 個 byte (blue、green、red 各 1
個 byte,最後 1 個 byte 未使用)
各成員所代表整數值如下頁所示:
73
.NET Framework WriteableBitmap 類別
http://msdn.microsoft.com/zh-
tw/library/system.windows.media.imaging.writeablebitmap.a
spx
WriteableBitmap類別的物件存放 RGB 影格資料
WritePixels(Int32Rect, Array, Int32, Int32) 方法將 byte 陣列
的影像存入WriteableBitmap 物件
74
.NET Framework Int32Rect 結構
http://msdn.microsoft.com/zh-
tw/library/system.windows.int32rect.aspx
Int32Rect 結構描述寬度、高度和整數矩形的位置
Height屬性取得或設定矩形的高度
Width屬性取得或設定矩形的寬度
75
.NET Framework 4.6 和 4.5 影像檔案儲存相關類別
1. File 類別
https://msdn.microsoft.com/zh-
tw/library/system.io.file(v=vs.110).aspx
2. FileStream 類別
http://msdn.microsoft.com/zh-
tw/library/system.io.filestream.aspx
76
3. BitmapSource 類別
http://msdn.microsoft.com/zh-
tw/library/system.windows.media.imaging.bitmapsource.as
px
4. JpegBitmapEncoder 類別
http://msdn.microsoft.com/zh-
tw/library/system.windows.media.imaging.jpegbitmapenco
der.aspx
77
Visual Studio C# Kinect 程式設計參考資料
1. 劉超群,Kinect體感程式探索使用C#,2013,松崗,
ISBN:978-957-22-4115-8。
2. Programming Kinect for Windows v2: (02)
http://channel9.msdn.com/Series/Programming-Kinect-for-Windows-v2