顯示具有 00360612_惠增展 標籤的文章。 顯示所有文章
顯示具有 00360612_惠增展 標籤的文章。 顯示所有文章

2013年6月9日 星期日

課程回顧

1.最喜歡的作業是什麼?
在這學期的作業當中,我最喜歡的是專題製作。可以利用上課學到的東西發揮自己的創意,把腦中想像的成品呈現在同學面前,尤其當自己的作品有很大的完成度時,所獲得的成就感跟大家的認同感於我的內心很大的感觸。而在製作專題的過程中面臨問題,並設法解決問題這個過程,雖然辛苦,但是透過自己實踐去想辦法完成屬於自己的題目,讓我學習到很多課堂上學習步道的經驗更培養出解決問題的辦法。


2.在課堂上學到什麼?
對於arduino與OPENCV的使用讓我可以更大程度的把腦中想製作的題目呈現出來,每學習到一種新的技術對自己就有更大的突破!尤其是arduino,讓我可以把以前學到的電子電路和上學期學的processing做一個結合,把電腦的東西帶入現實,真的是一件非常新鮮有趣的事情!


3.上完課有沒有什麼改變?
上完這學期的看之後,我開始學觀察附近周遭發生的事情與問題,有時會想,如果這些問題利用城市去解決該如何解決?我該用什麼技術去呈現?有了這次上課學到的技術,我可以著手去解決一些麻煩的事情,並想辦法程式化,希望透過思考這個過程,最後我能把很多問題規劃、創造出解決問題的機器或程式!

2013年6月7日 星期五

00360612_上機考心得




檢討:

這次的上機考我擅自用自備的視訊導致電腦出現錯誤無法正常讀取,回家之後發現錯誤才及時更正,可惜考試成績時間已經結束了......

在這裡修正一些小錯誤,人物超過畫面之所以會當機是因為圖片隨之超過鏡頭導致程式發生錯誤,我利用mouseX,mouseY當作鼠標目前位址,如果超過鏡頭則不處理因此布置產生當機。

for (int y=0; y<logoImg->height; y++) {
          if(y+mouseY<480 &&(y+mouseY-20)>0){  
         uchar* ptr1=(uchar*) (logoImg->imageData +y*logoImg->widthStep);
         uchar* ptr2=(uchar*) (logoImg2->imageData +y*logoImg2->widthStep);
         uchar* ptr3=(uchar*) (frame->imageData +(y+mouseY-20)*frame->widthStep);
       
         for (int x=0; x<logoImg->width; x++) {          
                if(mouseX<350){                 
                      if(ptr1[3*(x)]!=255&&ptr1[3*(x)+1]!=255&&ptr1[3*(x)+2]!=255){            
                      ptr3[3*(x+mouseX)]=(uchar)(ptr1[3*(x)]);
                      ptr3[3*(x+mouseX)+1]=(uchar)(ptr1[3*(x)+1]);
                      ptr3[3*(x+mouseX)+2]=(uchar)(ptr1[3*(x)+2]);}
                }
                else{
                      if(ptr2[3*(x)]!=255&&ptr2[3*(x)+1]!=255&&ptr2[3*(x)+2]!=255){      
                      ptr3[3*(x+mouseX)]=(uchar)(ptr2[3*(x)]);
                      ptr3[3*(x+mouseX)+1]=(uchar)(ptr2[3*(x)+1]);
                      ptr3[3*(x+mouseX)+2]=(uchar)(ptr2[3*(x)+2]);}
                }                
           }


去背的寫法是如果皇冠的圖片那格pixel的RGB皆>+255表示這格是白色因此將不做任何動作,其他的畫素則取代原本的圖,如此一來便完成皇冠的去背!

 if(ptr1[3*(x)]<255 && ptr1[3*(x)+1]<255 && ptr1[3*(x)+2]<255){   
              ptr2[3*(x+180)]=ptr1[3*(x)]; 
              ptr2[3*(x+180)+1]=ptr1[3*(x)+1]; 
              ptr2[3*(x+180)+2]=ptr1[3*(x)+2];  
 }

心得:
這次考試並不難而我也確實有做出來!但是視訊鏡頭因為過新導致與OPENCV衝突,須把封鎖截除才能正常使用,氣死我了!也算學了個教訓,拿到新東西,縱然品質很好,也要先動手測試,以免發生類似的狀況,得不償失!

考題「兩個皇冠」與最後一次的作業十分相像,只是一個是放在臉上一個放在頭上,然後再上X軸的判斷式判斷目前所屬的區域即可完成題目,但要注意的是圖片大小不得超過視訊影像的大小否則會錯誤,不過皇冠本來就比視訊影像要小因此不必在意,但圖片若超出影像範圍仍會發生不可預期的錯誤,因此應設立一個錯誤偵測,若人頭超過某個區域則不以理會這樣就不會造成程式的錯誤,這是我在考完試後才想出來的,重新檢查程式時發現的一個解決辦法。

不管考試結果如何,我最後還是把程式寫出來了。有達到學習的目的,這樣就夠了。









2013年5月6日 星期一

00360612_惠增展_變色、透明

變色!!
mergeImg=cvCloneImage(frame);
  for (int y=21; y<175; y++) {
    uchar* ptr2=(uchar*) (logoImg->imageData +y*logoImg->widthStep);
    uchar* ptr1=(uchar*) (mergeImg->imageData +(y+y1)*mergeImg->widthStep);
    for (int x=15; x<220; x++) {  
        int R,G,B;
       if(ptr2[3*(x+x1)]>=240 && ptr2[3*(x+x1)+1]>=240 && ptr2[3*(x+x1)+2]>=240){
                              ptr2[3*(x+x1)]=ptr1[3*(x+x1)];
                              ptr2[3*(x+x1)+1]=ptr1[3*(x+x1)+1];
                              ptr2[3*(x+x1)+2]=ptr1[3*(x+x1)+2];
                              if(x<110&&y<87){
                                       R=255;G=0;B=0;}
                              if(x>110&&y<87){
                                       R=255;G=255;B=128;}
                              if(x<110&&y>87){
                                       R=255;G=255;B=128;}    
                              if(x>110&&y>87){
                                       R=255;G=0;B=0;}
                              if( ptr2[3*(x+x1)]<=130 && ptr2[3*(x+x1)+1]<=130 && ptr2[3*(x+x1)+2]<=130){
                                       ptr2[3*(x+x1)]=B;
                                       ptr2[3*(x+x1)+1]=G;
                                       ptr2[3*(x+x1)+2]=R;
                              }                                                              
       }
    }
}



透明!
mergeImg=cvCloneImage(frame);
  for (int y=0; y<logoImg->height; y++) { 
    uchar* ptr2=(uchar*) (logoImg->imageData +y*logoImg->widthStep);
    uchar* ptr1=(uchar*) (mergeImg->imageData +(y+y1)*mergeImg->widthStep);
    for (int x=0; x<logoImg->width; x++) {    
        int R,G,B;
       if(ptr1[3*(x+x1)]>=110 && ptr1[3*(x+x1)+1]>=110 && ptr1[3*(x+x1)+2]>=110){
                              ptr2[3*(x+x1)]=ptr1[3*(x+x1)];
                              ptr2[3*(x+x1)+1]=ptr1[3*(x+x1)+1];
                              ptr2[3*(x+x1)+2]=ptr1[3*(x+x1)+2];                                                               
       } 
    }


2013年4月29日 星期一

00360612_惠增展_相框


上次請假沒上到課害我這次追進度追到下課,好累喔!!
不過終於做出來了開心^^
------------------------------------------------------
程式碼:
#include "cv.h"
#include "cxcore.h"
#include "highgui.h"
#include "stdio.h"

#define alpha 0.3
#define x1 0
#define y1 0

int main()
{
IplImage* gray = NULL;
IplImage* bw = NULL;
IplImage* pCannyImg = NULL;

CvCapture *capture;
IplImage *frame;
capture=cvCreateCameraCapture(0);
cvNamedWindow("Webcam",1);
cvNamedWindow("Webcam1",1);
cvNamedWindow("Webcam2",1);
cvNamedWindow("Webcam3",1);
cvNamedWindow("Webcam4",1);



//----------------------------------------
IplImage* pImg = NULL;
IplImage* bImg = NULL;
IplImage* gImg = NULL;
IplImage* rImg = NULL;
IplImage* logoImg = NULL;
IplImage* mergeImg = NULL;

//----------------------------------------

while(1)
{
frame = cvQueryFrame(capture);
logoImg=cvLoadImage("ph1.jpg");
//-----------
bImg = cvCreateImage(cvSize(frame->width,frame->height), IPL_DEPTH_8U, 3);
gImg = cvCreateImage(cvSize(frame->width,frame->height), IPL_DEPTH_8U, 3);
rImg = cvCreateImage(cvSize(frame->width,frame->height), IPL_DEPTH_8U, 3);
mergeImg = cvCreateImage(cvSize(frame->width,frame->height), IPL_DEPTH_8U, 3);
//-----------

cvShowImage("Webcam", frame);

gray = cvCreateImage(cvSize(frame->width,frame->height), IPL_DEPTH_8U, 1);

//-------------------

// Get blue pixels
for (int y=0; y<frame->height; y++) {
  uchar* ptr1=(uchar*) (frame->imageData +y*frame->widthStep);
  uchar* ptr2=(uchar*) (bImg->imageData +y*bImg->widthStep);
  for (int x=0; x<frame->width; x++) {    
     ptr2[3*x]=ptr1[3*x];
     ptr2[3*x+1]=0;
     ptr2[3*x+2]=0;  
     }
}


// Get green pixels
for (int y=0; y<frame->height; y++) {
  uchar* ptr1=(uchar*) (frame->imageData +y*frame->widthStep);
  uchar* ptr2=(uchar*) (gImg->imageData +y*gImg->widthStep);
  for (int x=0; x<frame->width; x++) {    
     ptr2[3*x]=0;
     ptr2[3*x+1]=ptr1[3*x+1];
     ptr2[3*x+2]=0;  
     }
}

// Get red pixels
for (int y=0; y<frame->height; y++) {
  uchar* ptr1=(uchar*) (frame->imageData +y*frame->widthStep);
  uchar* ptr2=(uchar*) (rImg->imageData +y*rImg->widthStep);
  for (int x=0; x<frame->width; x++) {    
     ptr2[3*x]=0;
     ptr2[3*x+1]=0;
     ptr2[3*x+2]=ptr1[3*x];  
     }
}


//Insert a logo into an image


mergeImg=cvCloneImage(frame);
  for (int y=0; y<logoImg->height; y++) {
    uchar* ptr2=(uchar*) (logoImg->imageData +y*logoImg->widthStep);
    uchar* ptr1=(uchar*) (mergeImg->imageData +(y+y1)*mergeImg->widthStep);
    for (int x=0; x<logoImg->width; x++) {    
       if(ptr2[3*(x+x1)]==255 && ptr2[3*(x+x1)+1]==255 && ptr2[3*(x+x1)+2]==255){
                              ptr2[3*(x+x1)]=ptr1[3*(x+x1)];
                              ptr2[3*(x+x1)+1]=ptr1[3*(x+x1)+1];
                              ptr2[3*(x+x1)+2]=ptr1[3*(x+x1)+2];
       }
    }
  }  

//------------------------

cvShowImage("Webcam", frame);
cvShowImage("Webcam1", gImg);
cvShowImage("Webcam2", bImg);
cvShowImage("Webcam3", rImg);
cvShowImage("Webcam4", logoImg);


cvWaitKey(10);
}
cvReleaseCapture(&capture);
cvDestroyWindow("Webcam");
cvDestroyWindow("Webcam1");
cvDestroyWindow("Webcam2");
cvDestroyWindow("Webcam3");

}

2013年4月28日 星期日

00360612_惠增展 自畫像


#include<cv.h>
#include<highgui.h>
int main()
{
IplImage* gray = NULL;
IplImage* bw = NULL;
IplImage* pCannyImg = NULL;

CvCapture *capture;
IplImage *frame;
capture=cvCreateCameraCapture(0);
cvNamedWindow("Webcam",1);
cvNamedWindow("Webcam1",1);
cvNamedWindow("Webcam2",1);
cvNamedWindow("Webcam3",1);

//gray = cvCreateImage(cvSize(frame->width,frame->height), IPL_DEPTH_8U, 1);

//bw = cvCreateImage(cvSize(frame->width,frame->height), IPL_DEPTH_8U, 1);

//pCannyImg = cvCreateImage(cvGetSize(frame), IPL_DEPTH_8U, 1);



 

while(1)
{
frame = cvQueryFrame(capture);
cvShowImage("Webcam", frame);
gray = cvCreateImage(cvSize(frame->width,frame->height), IPL_DEPTH_8U, 1);

cvCvtColor(frame, gray, CV_BGR2GRAY);
cvShowImage("Webcam1", gray);
bw = cvCreateImage(cvSize(frame->width,frame->height), IPL_DEPTH_8U, 1);

cvThreshold( gray, bw, 145, 255, CV_THRESH_BINARY );
cvShowImage("Webcam2", bw);
pCannyImg = cvCreateImage(cvGetSize(frame), IPL_DEPTH_8U, 1);


cvCanny(gray, pCannyImg, 50, 150, 3);
cvShowImage("Webcam3", pCannyImg);
cvWaitKey(10);
}
cvReleaseCapture(&capture);
cvDestroyWindow("Webcam");

}