2008年6月6日 星期五

期末程式作業

要讓攝影機判斷有沒有東西進到畫面裡,然後再讓程式做出一個反應,這個程式題目一剛開始聽起來就覺得好像很難。(實際上也真的不簡單)

後來老師有給我們一個學長的範例程式,他已經寫到可以判斷進入畫面的物件了,所以我們只需要再加上讓程式會有反應的部分就好了。

學長的程式畫面如下:

先點選建立背景

建立完背景

開啟物件偵測

物件偵測中

有物件進入畫面

我的想法是,既然最後是用出現黑色和白色的畫面來判斷進入的物件,那我只要設定當白色畫面出現一定面積大小之後(那就是代表有東西出現在攝影機的畫面內),程式就會顯示出一行字這樣子,表示攝影機偵測到有物件進入畫面。

一開始,要先找到的地方就是程式判斷進入畫面的物件,然後再將物件顯示成白色畫面的程式部份。

這段程式碼在學長程式裡的Timer2(看起來像時鐘的),可以直接點進去,如下:

滑鼠點這個時鐘2下,就可以直接看到裡面的程式碼

我在程式裡加上 int test=0;

當畫面有一個白色的點時,test就加1。

一張畫面是由很多點所組成的,例如 800*600 = 480000 個點,所以我在這邊決定用有5000點的時候,程式才會有反應。

在這個函數結束的時候,如果白色的面積超過5000點,程式就會跳出警告視窗,表示有東西進到攝影機的畫面內。

if(test >5000)

{

  ShowMessage("你擋住我了....");

  exit(0);

}

執行畫面如下:

出現警告訊息

但是我後來發現警告訊息會一直重複出現,然後在部落格上面看到有其他同學找到解決的辦法,把警告視窗改成用"label"來顯示字串。

所以我就把原本 if 那邊的程式碼改成

if(test > 5000)

  Label2-> Caption ="你擋住我了.... ";

else

  Label2-> Caption =" ";

出現的畫面如下:


改成將字顯示在 label 裡面

雖然感覺爛爛的,不過至少是把程式會有反應的部份給做出來了。

要程式有其他的反應方式,也大概可以用相同的方法,就是在 if 裡面寫的東西在改一下就好了。

程式碼位置 : http://ss24.mcu.edu.tw/~s5361045/FinalHW.rar

沒有留言: