2012年3月20日 星期二

HW01

第一次的作業是取得Webcam驅動程式的相關資訊
一開始是利用
"lblCapDriverName->Caption = szDeviceName;"
和
"lblCapDriverVersion->Caption = szDeviceVersion;"
兩行指令擷取視訊鏡頭的名字與版本且顯示在label元件的caption上



創造一個能顯示視訊畫面的Window


還可以修改視訊視窗大小


再來利用capDriverConnect(hwndVideo, dwDriverIndex);這段程式碼和視訊鏡頭連結並顯示畫面


將畫面調整成
Preview模式


最後再設定畫面楨數就可以開始視訊了,我將畫面楨數調整為每秒33張圖,這邊用的是capPreviewRate(hwndVideo, 33);這段程式碼,為什麼最後面的數字是33而不是30呢?問過老師後才知道原來後面的數字指的是每微秒多少張圖片,而1000微秒才等於1秒,所以若每秒要30張圖,則要1000/33才會接近30S/FPS


心得:本來以為要用程式來擷取視訊鏡頭的畫面是很難的一件事,沒想到每段程式碼都是短短的甚至只有一行,只要懂得呼叫視訊鏡頭的驅動程式,也就是VFW的函式庫,再懂得調整他的參數,其實一點都不難。

HW01

這是這堂課的第一個作業
這次的作業老師有把所有的程式碼都放到網路上
所以全部都是copy老師的
老師寫得好詳細,每個動作都有用文字寫出來
所以我很快就完工了,而且老師的程式碼都有註解
使我一下子就可以看懂了
我程式做完後 出現了一個很大的問題
就是"視訊器不配合"
不管我怎麼拍都是綠色的
後來還是靠KEA姐的視訊器拯救了我
我才得以完工

這裡是顯示出視訊裝置驅動程式的名稱與版本


320*240的圖


640*480的圖
這兩張只有Size的不同而已
還有因為我拍了很多次所以我覺得拍照那邊有點不方便
拍照跟刪除不同個 所以我拍完後要拍另一張就要先刪除才能在拍
所以我後來就把他們給結合了
全部放到Connect1Click裡
程式碼就是把Disconnect1Click裡面的
capDriverDisconnect(hwnVideo);
移到Connect1Click裡
capDriverconnect(hwnVideo);的上面
所以我要拍照時會先把之前的那一張直接刪除直接拍

感覺還有很多東西可以玩的回去再研究囉

HW01

HW01


這次作業是要將視訊鏡頭畫面依照比例放大縮小

Connect(連結)
Enable(致能)

先用擷取視窗與BCB做連結與致能動作


在選擇要擷取畫面的頻率


選擇畫面大小將畫面做調整



心得:
這次操作過程中,依照Blog上的只是一步一步去做,發現會因為看太快而乎略掉一些內容,反覆檢查才會檢查出問題在哪裡,像是公共變數沒有宣告、擷取畫面視窗放大時只有視窗會放大但畫面沒有跟著放大的狀況之類等等...,後來跟同學討論後才順利解決這些問題。





HW01

這次的作業是關於視訊攝影機的擷取,
大致上介面如下:










以下是功能表裏的功能選項(↓)










點擊「WebCam中的Driver: Name / Version裡的On」(快捷鍵:Ctrl + O)
即可看到自己的視訊攝影機的版本資訊(↓)











產生一個給視訊影像撥放畫面的空間(快捷鍵:Ctrl + C)
左方就會出現一塊黑色的方塊(↓)










點擊「Driver - Capture Window裡的Connect」(快捷鍵:Ctrl +Alt+C)
可以使攝影機與程式做連結,
但是畫面只有一格的畫面(↓)










如果要讓畫面可以流暢的撥放擷取,
就要開啟「Preview Rate」中的「30 frame/sec」、「15 frame/sec」、「1 frame/sec」,
並且把「Display Mode: Preview」(快捷鍵:Ctrl +E)做連接(↓)










最後再把畫面調到完全符合視窗的大小(原本只有整個畫面的一小塊),
只要把「Preview Scale」打開就算完成了(↓)











心得:
雖然在之前就有在別的課上過視訊課程,
但不同的老師就有不同的教材,
所以一切都還蠻新鮮的,
這也是我第一次使用筆電內建攝影機來當上課教材,
一開始還因為和攝影機程式搶使用權,
而導致無法繼續使用,
還好有發現解決方法,
雖然不是很完美,
但可以再嘗試更多方式
這次功課要把攝影機所擷取到的畫面放到Window顯示出來。
首先從工具新增一個TPanel,這個Panel是拿來當Window的。
接下來拉出MainMenu來新增選項,上面是完成圖。

使用CREATE創造一個Window,目前還沒有畫面。

CONNEC是把Window和視訊裝置的驅動程式連結起來。
ENABLE則是設定他的模式為Preview

接下來設定顯示的速率就可以來視訊了。

心得:老師一步步的解說程式碼,使我很容易理解這段程式碼在幹嘛。而且,把視訊鏡頭分解成abcd步驟也比較好理解視訊是如何運作,今天學會了把視訊鏡頭的畫面顯示出來,希望接下來能學到用鏡頭跟遊戲互動的課程,應該會很有趣。

HW01

在之前的影像處理中
練習了些利用BCB做影響處理的程式
所以 對於一些基本語法不會太陌生

第一次的作業是先把視訊的影像讀出來
在學校是先用新版的BCB先做
雖然是32-bit 卻須改成64-bit的宣告
// wchar_t szDeviceName[80];
// wchar_t szDeviceVersion[80];
建立視窗的 (LPSTR) 須改成(LPWSTR)
不然都出現型別轉換的錯誤

可是回到宿舍的電腦BCB6 元件要重拉
所以又重做了一次
BCB6程式碼只須照老師的範例貼上去就能執行 無須多做修改
筆電原本就有內建視訊 就沒另外接視訊 直接做測試

顯示資訊
進行連接
設定Preview+Rate 33.3 miliseconds

心得:之前互動電子課程中是利用DevC++結合OpenCV來做視訊相關的作業,跟BCB差別在沒有使用者介面,須修改速率或一些數值,都只能從程式碼裡改,比較不方便。期待接下來的界面能再增加許多功能,學習視訊方面的應用。

2012年3月19日 星期一

HW01

這是我們的第一個作業!!

視訊鏡頭雖然看起來簡單!!但其實裡面是要使用許多的方法才能讓他開始顯示螢幕!

當然我們一開始是要知道我們的視訊鏡頭的資訊
這是利用
lblCapDriverName->Caption = szDeviceName;
// lblCapDriverName 為 TLabel 元件的 Name
lblCapDriverVersion->Caption = szDeviceVersion;
// lblCapDriverVersion 為 TLabel 元件的 Name

當然再來開啟影像檔也是!
雖然一開始開啟時只有鏡頭的右上角一小塊的感覺!!
因為我們的Panel拉得太小,所以顯示的只有我們拉的大小而已!
但我們可以利用
capPreviewScale(hwndVideo, true / false )
這個來控制是否要符合Panel的大小

再來我們可以利用改變Panel的大小然後去調整影像的大小

pnlCaptureWindow->Width = 330;
pnlCaptureWindow->Height = 250;
iCapWindowWidth = 320;
iCapWindowHeight = 240;
MoveWindow(hwndVideo, iCapWindowX1, iCapWindowY1, iCapWindowWidth, iCapWindowHeight, true);



再來我們還可以改變它每秒所顯示的影像張數,
其實我們看到的影片是連續的照面所做成的,
當然每秒所顯示的張數越多,就會讓影像看起來更有連續性!
我們利用 capPreviewRate(hwndVideo, " XXX "); 可以去調整

心得:
我覺得這次的作業雖然很基本!
但是很重要!因為這堂課最重要的就是視訊鏡頭了
如果我們連視訊鏡頭都不能設置好!!
那怎麼可能又可以繼續的往下做下去呢?
當然我們也學習到了許多影片的觀念!
像是影像每秒幾張,越多的話可以使的影像感覺起來更流利呢!!