2010年6月13日 星期日
Course Review 課程回顧
這堂課是還蠻有趣的一堂課,一開始看到課程大綱的時候,覺得有點像是影像處理,要去跑程式和算數學的,可是上課後發現,其實這堂課是要實作為主的,而且課程都蠻簡單的,前面幾堂課,都是做跟顏色有關係的處理,在這邊就了解到顏色RGB在視訊處理裡面分成三個CHANNEL,一開始的時候覺得很難,因為他是用ARRAY去跑的,可是熟悉了之後,就蠻容易上手的,而在期中專題之後又是另一個處理視訊的領域:剪影和投影。利用這兩個技術,就可以改善視訊用顏色偵測的不穩定,讓我比較有有成就的程式,反而是上機考的考試,一開始看到題目的時候覺得蠻困難的,因為要把人的高度設定為動態的,然後要在他頭上畫線,不過在實作的時候發現,他有點像顏色偵測的時候一樣多跑一個WHILE迴圈,紀錄最後一次的Y座標就可以畫線了。回顧整個課程,我覺得視訊處理是個很好做研究發展的領域,入門的技術沒有很難,不過就看做的努力如何了。而我覺得這堂課很棒的是老師上課的時候會先給一個概念,然後用引導的方式讓我們思考這個領域可以做什麼事情,先引導概念後再啟發我們對課程的興趣很棒!
HW08: Background Subtraction

這是期中專題後另一個領域,就是利用背景的差異來判定是不是有影像的更新,所以一開始攝影機在偵測的時候不能夠有人,接著延伸的作業是人要站在灰色的框內,超出就會被扣分,這個部分用到的是pixel的運算:
for (int y=0; y
uchar* ptr1=(uchar*) (maskImg->imageData +y*maskImg->widthStep);
uchar* ptr2=(uchar*) (difference1->imageData +y*difference1->widthStep);
for (int x=0; x
if (ptr1[3*x] != 255 && ptr1[3*x+1] != 255 && ptr1[3*x+2] != 255 )
score3++;
if (ptr2[x] == 255) {
if (ptr1[3*x] == 255 && ptr1[3*x+1] == 255 && ptr1[3*x+2] == 255 )
score1++;
else
score2++;
}
}
}
(ptr1[3*x] != 255 && ptr1[3*x+1] != 255 && ptr1[3*x+2] != 255表示圖片以外的白色
然後如果有點在白色的區域裡面,就是扣分的計算,否則就是得分。
這個作業蠻有趣的,因為他不需要很困難的程式撰寫,只要幾個迴圈去處理就好了
ps. model是我室友,他打電動打到一半被我叫出來截圖
2010年5月2日 星期日
期中專題-貓抓老鼠


製作學生:495511466 郭宸雨 495511210 李俞萱
專題動機與介紹:
一開始我們想到是釣魚遊戲,利用亂數產生的魚去撈,但是我們在設計的時候發現魚只能在固定位置亂數產生,這樣跟一般的撈魚遊戲有點不合邏輯,所以才改成亂 數時間產生老鼠,然後去抓老鼠,只要有抓到老鼠就可以加分的遊戲。
使用的技術:
opencv的視訊處理功能,主要是用顏色偵測(color detection)以及虛擬滑鼠(virtual mouse)去判斷指標位置,進而去抓到老鼠
實作介紹:
利用亂數產生的圖片,當圖片被亂數產生時,就有個布林值去判斷圖片被產生了,布林值的主要目的是要當滑鼠跟圖片發生collision時,就表示抓到了老 鼠,就可以計算分數,而且可以產生抓到老鼠的音效
遭遇的困難:
圖片消失太快,導致抓不到老鼠。
一開始在跑程式的時候,是 設定老鼠出現消失,就是一個布林值而已,所以當老鼠出現後,下frame就會馬上消失,會讓看到老鼠,正要去抓的時候,老鼠就不見了,所以我們是用一個陣 列去存老鼠的狀態,當老鼠出現後,讓他增加停留的時間,延長老鼠停留的時間,這樣一來不用去改waitkey的值,也可以讓老鼠出現後比較慢的消失。
而另一個問題是貼圖的問題,一開始把logo貼上去的時候,發現有灰色的框框
,就是他不能有空白底,在這邊一開始以為是圖片格式的關係,換了好多個格式後發現無法解決,但後面仔細看了一下貼上logo的程式碼後發現,原來是因為兩層的for迴圈,把圖片每個pixel都貼上去了,於是解決的方式就是多一個判斷式:if(ptr1[3*(x)]!=100 && ptr1[3*(x)+1]!=100 &&ptr1[3*(x)+1]!=100)把灰色以外的pixel複製進視訊裡面,這樣就解決啦。遊戲介紹:
一開始的畫面,要先偵測虛擬滑鼠的顏色

實際影片
心得與展望:
這是個蠻有趣的專題,比起其他專業科目的專題,這個專題算是簡單許多,不需要用到複雜的資料結構、資料庫、或是其他難度的程式碼,但是這個專題是要結合前幾次上課的技術,在加上專題的創意,才可以完成的,所以我覺得這次的專題很有趣。在專題demo時也參觀過其他組別的遊戲,雖然都是小遊戲,不過有很多創意,這也是這次專題所要學習的。而期末專題,也希望從這個專題去做延伸...能夠寫出更完美的專題。
2010年3月28日 星期日
2010年3月21日 星期日
HW04: Color Detection

今天要學習的是偵測視訊的顏色,並且抽換掉該目的顏色,在這張圖片當中,就是要將多拉a夢的白色臉做顏色的抽換,而做法跟上次的pixel處理一樣,先是用for迴圈把整張圖片跑過一次,接著再用D = sqrt((原始藍色-偵測藍色)^2 + (原始綠色-偵測綠色))^2 + (原始紅色-偵測紅色))^2) 來偵測顏色,並且用
if (sqrt(D) <>
ptr1[3*x]=0;
ptr1[3*x+1]=0;
ptr1[3*x+2]=255;
}
TH就是顏色的門檻值,在這個程式碼是將顏色抽換成紅色。
接著是開啟一個空白的視窗,原始的白色,用紅色著色到白色視窗裡面,使用的方式跟顏色的偵測是一樣的,不過不同的地方是,在做FOR迴圈是去跑原始視訊的PIXEL,而在顏色抽換的地方則是抽換掉新的白色視窗的顏色,而老師要求著色的軌跡不能洗掉,一開始把全白的FOR迴圈寫在WHILE裡面,迴圈一執行,白色的底圖會一直覆蓋掉,所以必須把白色的FOR迴圈寫在外面,這樣才可以把軌跡留存
2010年3月14日 星期日
HW03: Pixel-Level Processing in OpenCV
2010年3月7日 星期日
HW02: Image-Level Processing in OpenCV
1. Download HW02.cpp from webhd.mcu.edu.tw.
2. Excute and trace the program.
3. Study the codes.
4. Extend HW01.cpp to generate three videos. The first one is gray-level video. The second one is the black and white video. The third one is a video with edges only. Note that you need to use cvFlip() function to change the display of videos.
3. Study the codes.
4. Extend HW01.cpp to generate three videos. The first one is gray-level video. The second one is the black and white video. The third one is a video with edges only. Note that you need to use cvFlip() function to change the display of videos.

註解程式碼
5. Modify the vaue of the third parameter in
cvThreshold( gray, bw, 127, 255, CV_THRESH_BINARY );
such that your face becomes black.
6. Find the differences between
cvThreshold( gray, bw, 127, 255, CV_THRESH_BINARY );
5. Modify the vaue of the third parameter in
cvThreshold( gray, bw, 127, 255, CV_THRESH_BINARY );
such that your face becomes black.
6. Find the differences between
cvThreshold( gray, bw, 127, 255, CV_THRESH_BINARY );
從灰階轉換為黑白,127以及255為門檻值,如果要加深讓臉部變成黑色,就把門檻值調高
cvThreshold( pImg, pImg2, 127, 255, CV_THRESH_BINARY );
cvThreshold( pImg, pImg2, 127, 255, CV_THRESH_BINARY );
將彩色轉為黑白 有就是255,沒有就是0
7. How many colors in the pImg2 image?
7. How many colors in the pImg2 image?
2^3=8 因為R,G,B(0以及255兩種)
8. Use cvResize() function to extend HW02.cpp such that the displayed image is enlarged by a factor of 3.14.
8. Use cvResize() function to extend HW02.cpp such that the displayed image is enlarged by a factor of 3.14.
要先在畫出一個視窗,des的視窗大小就是src視窗大小*3.14
使用Resize(src,des,CV_INTER_LINEAR)
將src的圖檔大小丟到des裡面,並且使用CV_INTER_LINEAR演算法

註解程式碼
9. (Optional) Study functions of cvDilate() and cvErode().
9. (Optional) Study functions of cvDilate() and cvErode().
心得:
這次看的程式碼是做影像的處理,分別將彩色的照片轉換為灰階、黑白、以及繪出邊線,等方式,
這次看的程式碼是做影像的處理,分別將彩色的照片轉換為灰階、黑白、以及繪出邊線,等方式,
老師在上課的時候會把使用的函式講清楚,所以可以在程式碼旁邊註解就好,今天學到的比較難
一點的是把視訊轉換為灰階那些處理,一開始就發現轉換出來畫面會變成顛倒的狀況,老師解釋是因為再做二維陣列處理的時候會將影像轉換,才會有這樣的狀況,所以只要再做一次cvFlip就可以解決了。另外再放大的時候,會出現警告訊息,是因為放大的倍率必須是整數(int)的形式才行。
訂閱:
文章 (Atom)












