星期二, 5月 01, 2012

Week 12: 預覽回呼函數 preview callback function

1. 肢體感應遊戲的歷史

a. Sony PS2 Eye Toy
b. Wii
c. XBox Kinect

2. 預覽回呼函數 preview callback function

當視訊擷取驅動程式接收到來自視訊裝置的畫面(frame), 在 preview 模式之下, 會將此畫面顯示在所連結的視訊視窗之中。

我們可以透過 capSetCallbackOnFrame 這個函數來指定當發生 frame preview 之前, 先執行一個特定的 callback function, 即預覽回呼函數。這個預覽回呼函數的名稱可以由我們自由命名, 但是傳入的參數個數與其資料型態則必須符合 VFW 的規定。

// 使用者自行寫的預覽回呼函數必須在公用變數宣告區宣告
LRESULT CALLBACK FrameCallBack( HWND hwndCapture, PVIDEOHDR lpvhdr );

// 設定 callback function 與視訊擷取視窗之間的連結,
// 請將此行放到開啟視訊擷取視窗, 並開始 preview 的指令後

capSetCallbackOnFrame(hwndCapture, &FrameCallBack);

3. 如何關閉預覽回呼函數?

capSetCallbackOnFrame(hwndVideo, NULL);

4. VFW 函式介紹:

a. 取得視訊畫面基本資料 (capGetVideoFormat)

b. BITMAPINFO structure

c. BITMAPINFOHEADER structure

5. 範例程式 Webcam Programming (4): 預覽回呼函數

範例程式 Webcam Programming (4) 主要分成五個部分:
part A: 預覽回呼函數之設定與關閉
part B: 預覽回呼函數與視訊資料表頭結構
part C: 透過預覽回呼函數將預覽畫面變成灰階畫面
part D: 透過預覽回呼函數在視訊畫面中填入單一顏色的長方塊
part E: 透過預覽回呼函數將圖片置入視訊擷取視窗之中

part A: 預覽回呼函數之設定與關閉

本部分的主要目的是讓同學了解視訊擷取視窗之預覽回呼函數的設定與使用方法。要設定預覽回呼函數, 是透過 capSetCallbackOnFrame 函式完成的, 函式的輸入參數有二, 視訊擷取視窗的代碼(handle)與所設定預覽回呼函數之位址。當程式開啟視訊擷取視窗後, 顯示預覽的畫面總數到 TLabel 元件上。


圖 4-A-1


圖 4-A-2

part B : 預覽回呼函數與視訊資料表頭結構



圖 4-B-3


圖 4-B-4


part C : 透過預覽回呼函數將預覽畫面變成灰階畫面 

part C 的目的是讓同學有能力存取視訊擷取視窗的緩衝區記憶體中的畫面資料。


圖 4-B-5

延伸想法: 可以將視訊畫面變成特定色調嗎?



請參考 影像處理課程作業三。當然也可以透過 ColorDialog 讓使用者選定顏色後, 計算出所選定顏色的 YUV 値, 再將 UV 値放進 YUY2 攝影機的緩衝區記憶體, 就大功告成了!

補充資料: RGB pixel formats

沒有留言: