顯示具有 495511105 標籤的文章。 顯示所有文章
顯示具有 495511105 標籤的文章。 顯示所有文章

2010年6月13日 星期日

Course review

1.這門課學到...
這門課其實對視訊認識了很多,原來利用C++可以讓視訊有這麼多的變化。從一開始的開啟視訊、顏色處理、顏色偵測,期中之後則是改運用projection,可以偵測手指移動的位置和最高點,利用這個完成了上機考的充血遊戲,也利用這個完成了期末專案的左右手對抗。這中間也發現,原來背景並不是像我們想像中的不變,而且會影響很多視訊處理的結果,像是光線對顏色的影響就很大。期中demo雖然買了黑色的海報紙當背景,但是還是會反光造成結果不正確,最後是商借朋友的外套(布面比較不反光)才能順利進行。期末的專案也是因為測到光線的改變,導致最高點過高,需要比較固定或沒有燈的背景才能順利進行遊戲。

2.最喜歡的作業是...
最喜歡的作業應該是HW04,因為那時候對視訊還不太熟悉,但是利用幾行程式碼就能偵測顏色,然後更動偵測到的顏色,甚至還能偵測顏色來畫畫,覺得很有趣,印象很深刻。

3.課程建議...
希望可以有多一點的時間準備期末專案。

Hw08


原本程式碼的圖是一張圓型的mask,後來自己設計了一個小人形,手指在綠色範圍內即會加分,若超出綠色小人形範圍就會顯示扣分。

期末專案_左右大對抗

專案名稱:紅白大對抗之左右版

遊戲說明:當遊戲進行時,將會聽到聲音指令,在指定時間內,左右手按其指令舉高或低於標準線,即可得分。


心得
這是期末專題是延伸期中專題而來,把顏色辨識的部分換掉,取而代之的是左右手是否有超過頭不來判斷左右手是否有舉起;這部分跟老師之前交的上機概念有很雷同的應用,只要多加幾個邏輯判別式就可以達成,先判斷頭一開始的高度接著在視窗上畫出頭部標準線,第二個步驟是分別投影左右兩個視窗的x軸和y軸,接著記錄比較其y軸的高度即可完成上述的要求;只是後來沒注意到頭部會影響到左右手的投影,玩家必須不能太靠近鏡頭否則頭的部分會影響到,後來想出的解決辦法應該是要把左右視窗投影的範圍縮小,不要偵測全部的視窗,這樣測出來誤判的機會我想會大大縮小,也讓這遊戲更加人性化;不過整個遊戲裡頭最頭痛的還是光線的部分,要找到合適的位置進行遊戲是有點困難的事情,光線太明亮的地方,會讓投影整個就偏掉了,必須重新開始執行遊戲,這部分的解決,讓我想到的是老師在課堂上測試真正的左右手辨識,只要用左右手追蹤我想可以完全無視光線的因素立即比對其高度是否有超越頭部,不過其演算法沒有很瞭解就放棄了該念頭(殘念);最後感到最奇怪的是cvFlip()這個函數,我在家要寫下這個函數畫面才不會左右顛倒,但是到了學校卻要把這個函數砍掉才不會左右顛倒,這實在是做這個專題的疑問吧,不過總體而言對這個專題很感興趣,也可以做很多的推廣跟應用,之後暑假有時間的話,會想要試著寫寫真正的左右手辨識,相信會是很不小的成就。


Demo影片



Hw10

其實這個作業和上機考很類似,只是把判斷y軸高度的部分切成左右兩個區塊。中間藍色為判斷左右區塊之分隔線,淺綠色為x軸的活動偵測,紅色則為y軸高度的活動偵測,淺綠色及紅色線都會隨著正在移動的點改變位置。

HW09

這次作業主要是利用xy的偵測,以前景和後景相減,找出活動的點的位置。圖中由紅線交會的點,會隨著手的上下左右而更動。這樣就算不利用顏色偵測,也可以達到互動的效果!

2010年5月2日 星期日

期中專案_紅白旗大對抗

Demo影片

遭遇困難
1. 因為需要播放音效的指令檔,但是剛開始會有影音不同步的問題,後來利用延遲的方式改善 這個問題。
2. 關於背景顏色,常常因為燈光的關係無法判斷或判斷錯誤,雖然買了黑色的書面紙當背景, 但還是因為有反光等問題造成判斷錯誤,最後發現用黑色衣服不反光,所以以黑色外套為背 景遮住測值的範圍。

心得
這次專題剛開始很快就決定要做紅白旗的遊戲,因為跟視訊的顏色判斷很符合,而且感覺很有趣。但是在製作過程中因為顏色判斷以及遊戲即時性的問題有遭遇一些困難,最後順利解決感覺很有成就感,而且實際玩也很動感。

未來展望
希望能增加更多指令的音效檔,讓遊戲更複雜刺激,並且增加遊戲關卡以及美化計分的介面。

2010年3月28日 星期日

期中專案

遊戲名稱:紅白大對抗

遊戲內容:
這是一個挑戰體力與反應的極限運動,
使用者會先在左右手配戴上指定顏色的手套,電腦將會顯示出指令,挑戰者必須限時內做出與指令相同的動作,優勝者即可進入挑戰英雄榜。

遊戲範例:
電腦指令::左手舉起來,白旗放下來etc...。
挑戰者須將手套顏色舉起或放下到指定位置。

2010年3月22日 星期一

Hw4

先設定要偵測的顏色及門檻值,將偵測到的顏色改成想要的顏色,再利用xy座標來控制要變色的區間。圖一為左右不同色,左半部將偵測到的黑色改為紅色,右半部將黑色改為淺藍色;圖二則為上下不同色,感謝同組組員當模特兒。
圖三則是將視訊切成四塊,每塊將偵測到的黑色改為不同的顏色。圖四則是先製造一個白色的frame,需要兩個ptr的指標,一個是偵測原始視訊的顏色,另一個是將偵測到的顏色軌跡顯示在新的視窗上。圖四的部分做完覺得很有趣,有種隔空畫畫的感覺,第一次看到老師示範覺得很神奇,學會之後發現其實沒有想像中的難。

2010年3月14日 星期日

HW3


















經由作業了解,pixel是由3個byte組成(RGB),利用pixel的處理,讓畫面分別以藍綠紅呈現。
EX:希望呈現藍色的效果,
每個pixel的第一個byte設定為"ptr2[3*x]=ptr1[3*x];",
其餘兩個byte則設為0"ptr2[3*x+1]=0;ptr2[3*x+2]=0;"。
這次除了了解pixel和byte的關係之外,也學習了利用指標和位置來處理畫面,雖然剛看到code覺得有點複雜,但了解後發現十分有趣!

















Logo嵌入和移動。
設定透明度"#define alpha 0.5"
利用x,y的座標來控制Logo水平移動。

2010年3月7日 星期日

Hw02

←原始圖(左上)

灰階(右上)

黑白(左下)

邊緣化(右下)








這次同時開了四個視窗,除了原始視窗外的三個視窗,在使用cvCreateImage時的最後一個變數都設為1(因為畫面是黑白的)。
利用cvCvtColor將彩色轉灰階;
利用cvThreshold將灰階的圖再轉黑白;
利用cvCanny將灰階的圖做邊緣畫處裡。
如果有畫面顛倒的問題,可利用cvFlip用做翻轉的動作。

← cvResize()
















利用cvResize(src, dest, CV_INTER_LINEAR); 設置畫面大小。

2010年2月28日 星期日

HW01


這是第一次用C++來執行webcan,而且程式碼意外的不太長。上網查了關於裡面function的使用,看到很多人都用cvCaptureFromCAM(),後來試了一下發現cvCreateCameraCapture()改成cvCaptureFromCAM()也可以用,主要是用來偵測視訊裝置;cvWaitKey(20)則是控制延遲擷取畫面的時間(毫秒)。




利用 frame2 = cvCloneImage(frame1); 和 cvFlip(frame1,frame2,1);做出兩個左右顛倒的視窗。
/* frame1是原始的畫面, frame2是翻轉過後的畫面
cvFlip內的值 0為水平翻轉,1為垂直翻轉,-1為水平+垂直翻轉 */


cvNamedWindow("Webcam",1); //數值可調整視窗大小