顯示具有 99361075王品雯 標籤的文章。 顯示所有文章
顯示具有 99361075王品雯 標籤的文章。 顯示所有文章

2013年6月9日 星期日

課程回顧

1.最喜歡的作業:
  這學期總共有好幾個,我最喜歡的是Opencv的作品!!不管是效果也好或是帶皇冠,還是最後期末專案的小畫家,能把簡單的視訊畫面做出這麼多不同的效果,真的很有趣,雖然都花了不少的時間去嘗試出來,但都有效果出來,真的很棒 :)


2.這堂課學到的:
  Arduino原來就只是一塊板子,但是卻能做出這麼多的東西,讓LED燈亮不是只有8051做得到!!!Arduino也讓我學到還有自己做硬體設備,不單單只是接電路板這麼簡單而已。Opencv學到可以在視訊上面做變化,不單單只是視訊,利用簡單的function讓視訊有不同的效果,很有趣很好玩。


3.課程後的改變:
  試著去接受程式,當一個題目出來的時候有方向去思考,而不是盲目的一直Try!!!對題目有想法有方向,是我在C++或是Java上找不到的,一直以來對於那些程式語言都是盲目的試,不管是Arduino還是Opencv,在語法上都不是這個的困難,甚至是去年上的Processing,都讓我對程式碼有所改變,雖然比較繁忙,但做出來真的很開心 :)

OpenCV-Change BGR




心得:
把背景換RBG的樣子,感覺好酷好有趣 !!
雖然這樣看起來蠻噁心的 =D
不過要達到這效果並不難  ~~

Arduino-LED閃爍 HW1



心得:
多個燈的作業其實也不難,很容易上手,
唯一花時間的就是剪電線了!!!!
程式碼很容易完成 :)

Opencv-期末上機考-王品雯



題目:
中線左右各放一個皇冠,頭到左邊會戴上左邊的皇冠,到右邊則戴上右邊的皇冠。

一開始把中間的線畫出來,皇冠就相當於把圖片放上去~
考試的時候沒有順利把皇冠放上去,再想可能是位子出了問題。
皇冠要怎麼跟著頭的移動改變位子,一開始想到是利用皮膚偵測的方式,但最後也沒有成功的移動。

修改過後的程式碼:

#include "cv.h"
#include "cxcore.h"
#include "highgui.h"
#include "stdio.h"

int main()
{
     IplImage * frame;
     IplImage* mergeImg = NULL;
     IplImage* pic1 = NULL;
     IplImage* pic2 = NULL;
     IplImage* pImg = NULL;  
     int mouseX=0;
     int mouseY=0;

     CvCapture * capture = cvCreateCameraCapture(0);        
     frame=cvQueryFrame(capture);     //將視訊畫面讀取進來
   
 //有圖片要為圖片申請空間
     mergeImg = cvCreateImage(cvSize(frame->width,frame->height), IPL_DEPTH_8U, 3);
     pImg = cvCreateImage(cvSize(frame->width,frame->height), IPL_DEPTH_8U, 1);
     
  //讀取圖片檔案
     pic1 = cvLoadImage("11.jpg");
     pic2 = cvLoadImage("22.jpg");
 
     cvNamedWindow("webcam",0);
     cvNamedWindow("Webcam1",0);

    while(true)
    {
     
        frame=cvQueryFrame(capture);          
        cvFlip(frame,frame,1);//翻轉視訊畫面


        cvCvtColor(frame, frame, CV_BGR2YCrCb);//轉換色彩空間    

  // 將膚色轉白色其他轉黑色,範圍是顏色下限與上限
        cvInRangeS(frame, cvScalar(0,137,77), cvScalar(256,177,127),pImg);
        //再轉回原本視訊影像
        frame=cvQueryFrame(capture);
        cvFlip(frame,frame,1);
     
  //複製原本的畫面至mergeImg
  mergeImg=cvCloneImage(frame);
     
        //劃出中線
  cvLine(mergeImg,cvPoint(150,0),cvPoint(150,255),CV_RGB(255,0,0),3,8,0);
  
       ---------------------------------------------------
     
        int redPixelNumber=0;
        int redPixelX=0;
        int redPixelY=0;
  
        //抓取膚色後變為白色  
        for (int y=0; y<pImg->height; y++)
        {
          uchar* ptr1=(uchar*) (pImg->imageData +y*pImg->widthStep);
          for (int x=0; x<pImg->width; x++)
          {  
             if(ptr1[x]==255)
             {    
             redPixelNumber++;
             redPixelX+=x;
             redPixelY+=y;
             }
          }
        }

       //變白色之後找平均點是為了要帶皇冠在頭上
        if (redPixelNumber>0)
        {
         mouseX=redPixelX/redPixelNumber;
         mouseY=redPixelY/redPixelNumber;
        }
     
        //將皇冠固定在視訊的畫面上
        for (int y=0; y<pic1->height; y++)
        {
           uchar* ptr1=(uchar*) (mergeImg->imageData +(y)*mergeImg->widthStep);//原本畫面
           uchar* ptr2=(uchar*) (pic1->imageData +y*pic1->widthStep);// 1皇冠
           uchar* ptr3=(uchar*) (pic2->imageData +y*pic2->widthStep);// 2皇冠
         
           //將第一皇冠(左)放到原本畫面上
           for (int x=0; x<pic1->width; x++)
           {
               if(ptr2[3*x]!=255)
               {    
                   ptr1[3*(x+20)]=ptr2[3*(x)];
                   ptr1[3*(x+20)+1]=ptr2[3*(x)+1];
                   ptr1[3*(x+20)+2]=ptr2[3*(x)+2];
               }
            }
         
            //將第二皇冠(右)放到原本畫面上
            for (int x=0; x<pic2->width; x++)
            {
               if(ptr2[3*x]!=255)
               {    
                   ptr1[3*(x+180)]=ptr3[3*(x)];
                   ptr1[3*(x+180)+1]=ptr3[3*(x)+1];
                   ptr1[3*(x+180)+2]=ptr3[3*(x)+2];
               }
            }
  
        }
   
        ---------------------------------------------------
   
         // 偵測第一個皇冠會在頭上
         for (int y=0; y<pic1->height; y++)
         {
           uchar* ptr1=(uchar*) (mergeImg->imageData +(y+mouseY-170)*mergeImg->widthStep);
           uchar* ptr2=(uchar*) (pic1->imageData + y*pic1->widthStep);
           for (int x=0; x<pic1->width; x++)
           {  
                 if(mouseX <150)if(ptr2[3*x]!=255)
                 {
                     ptr1[3*(x+mouseX-60)]=ptr2[3*(x)] ;
                     ptr1[3*(x+mouseX-60)+1]=ptr2[3*(x)+1] ;
                     ptr1[3*(x+mouseX-60)+2]=ptr2[3*(x)+2] ;
                 }  
           }
         }
       
         // 偵測第二個皇冠會在頭上
          for (int y=0; y<pic2->height; y++)
          {
           uchar* ptr1=(uchar*) (mergeImg->imageData +(y+mouseY-150)*mergeImg->widthStep);
           uchar* ptr2=(uchar*) (pic2->imageData + y*pic2->widthStep);
           for (int x=0; x<pic2->width; x++)
           {  
                 if(mouseX >155)if(ptr2[3*x]!=255)
                 {
                     ptr1[3*(x+mouseX-50)]=ptr2[3*(x)] ;
                     ptr1[3*(x+mouseX-50)+1]=ptr2[3*(x)+1] ;
                     ptr1[3*(x+mouseX-50)+2]=ptr2[3*(x)+2] ;
                 }  
           }
       }
   
      cvShowImage("Webcam",pImg );
      cvShowImage("Webcam1",mergeImg );  
             
      char key = cvWaitKey(33);
      if(key == 27)break;      
    }  
}

---------------------------------------------------

心得:

上機考的時候看到題目也先愣一下,了解題目後有些部分有一點想法。
雖然最後都沒有成功做出來,但是至少有方向,
考試後有順利完成其實很感動,有想法後有人教就有比較理解。
很謝謝那些教我、幫我一起完成的同學們 :)

2013年6月8日 星期六

OpenCV-期末專案-視訊小畫家




心得:
期末專案原先是想做出小畫家,可以利用手指畫的
但遇到的困難是,
如果用皮膚偵測的話會很難確定是手指
所以才改成用滑鼠代替手指
利用滑鼠左右鍵做出不同的顏色
再利用萬花筒做出不一樣的效果。
很有趣,不知道原來視訊上面可以畫畫!!

Arduino-期中專案-撈魚



心得:
期中專案花了蠻多時間做的,因為還要加上硬體的製作
就算程式碼成功寫出來,也要配上硬體能成功搭配,
先是程式碼的完成,但硬體不知道怎麼才能做出來
希望能有上下左右四個方向的按鈕,
但是後來不知道為什麼一直接觸不良,
最後只好剩下兩個上下的按鈕。
雖然展出很成功,但只剩下兩個按鈕很可惜

Arduino-鋼琴 99360754 陳威任 99361075 王品雯



心得:
Arduino利用小喇叭可以做出鋼琴我也覺得好酷!!
一個聲音很簡單,但兩個三個甚至是八個聲音,
就連電路板都要思考一下,光線路就花了一段時間
程式碼一開始也不知道要怎麼讓聲音不同
花了一段時間後終於順利先用出三個,直到順利用出八個聲音
但不知道是不是按鈕接觸不良的關係,
按到某一個按鈕的聲音會一直不停止

Arduino-水果盤 99360754 陳威任 99361075王品雯




心得:
Arduino做的水果盤,原本以為水果盤一定很難!
一開始連麵包板的線路也不知道怎麼接
程式碼也是一直用不出來不知道錯在哪裡,
後來Debug完也順利找到錯誤可以執行,
原來水果盤不算難,而且好好玩~~
超級有成就感 :)

Arduino-LED漸亮 99360754 陳威任 99361075王品雯




心得:
這是我們第一次接觸Arduino的東西,感覺很新奇,
一直聽到Arduino不知道是什麼,原來是一塊板子!!
USB當作電源輸入,LED燈當輸出
打幾行程式碼燈就會亮,跟組合語言比起來簡單多了~

2013年5月27日 星期一

偵測膚色,十字指標 99360754 陳威任 99361075王品雯



心得:
這是新接觸到的東西,剛接觸總是覺得很難,
確定在執行的時候也有遇到問題。
隨著偵測白色的出現而會算出新的平均值,
再會改變十字的位子。
但為什麼十字都不出現一直是我們的問題。
後來終於順利出現十字了!!!!!
感覺很酷,也很新奇。

萬花筒 99360754 陳威任 99361075 王品雯





心得:
利用視訊的翻轉達到萬花筒的效果,感覺好好玩哦!!
就以第一張陸續的翻轉所做出來的
其實不難,也還好編譯的過程沒遇到什麼問題 :)
想要做出不同又好看的圖案來才是比較困難的地方 =D

2013年4月29日 星期一

相框99360754 - 99361075





心得:
相框的效果感覺好酷!!!
一開始頻頻失敗,程式碼跑一跑就會自己當掉
當程式碼順利可以跑的時候相框又不會出現 :(
圖片大小還要剛好跟視訊大小一樣大...
明明看似都用好了,但卻還是無法執行。
後來拜託別人幫忙Debug就搞定了!!
很多小細節要注意,看似簡單卻困難重重

2013年4月22日 星期一

自畫像_99360754 陳威任 99361075 王品雯

 


心得:

將視訊的原圖轉為灰階和黑白還有線條
轉灰階跟黑白沒有什麼太大的問題,
最難的大概就是線條要清楚!
如果黑白的比例沒有調好線條會很不明顯
還好大致上的輪廓都很清楚 :)