顯示具有 00360151_李飛鴻 標籤的文章。 顯示所有文章
顯示具有 00360151_李飛鴻 標籤的文章。 顯示所有文章

2013年6月9日 星期日

LED水果盤



心得:
     
    想不到利用LED、光敏、可變電阻,簡單的硬體裝置以及程式,就可以做出水果盤出來,利用可變的控制可以改變閃爍的頻率,而光敏的感應則是LED所停留的位置,以及聲音的加入,也讓整個遊戲變得更像個遊戲。

期中專案-極光水燈


期中專案,本來是想利用光敏的光源感應,來做兩個水杯的光源互換。但發現過程中障礙非常的多以及艱困,我們不得不把這原本很有看頭的作品精簡化,但也必須不失他的迷人之處,最後就只能利用線路的接合,來做到一個無按鈕並且可以漸層變亮的效果。

課程回顧

1.你最喜歡什麼作業?

     這門課程中,最喜歡水果盤的作業,雖然沒有拍照或是拍成影片上傳,但是有做出來並且可以利用可變電阻來控制LED燈的閃爍快慢,再利用光敏電阻控制停留的位置,再加上聲音的置入,真的是一份具有價值以及有趣的作業。


2.你在課程中學到了什麼

   互動電子,不外乎就應該是硬體設施與人做互動吧,以前資訊概論曾看過學長姐們的作品,當初以為利用課堂上幾分鐘的時間就可以做出這樣驚人的互動作品,但實際上才知道他們花的時間及心力是我們不及之處。其中,學到了自己如何該了解程式碼,如何運用網路上的資源、老師所給的提示來修改出一個老師所規定的目標,也同時該如何與同學間不同的看法來達成老師的目的,期中期末專案也是如此,運用平常所學的知識,衍生出一個有自己想法的作品,其實自己也是蠻難相信的。


3.你在這門課中的改變

   除了要能夠自己修改程式的能力外,也必須擁有與同學討論的必要。重要的還是同學與同學的互相信任,如果沒有同學與組員的相伴,我想我這學期可能就浪費了,不過最重要的還是作業做完一定要儲存或是拍起來,這樣東西才能上傳到部落格。

2013年5月27日 星期一

期末專案


                                            計算你的時間!                      計算你的數量!
 

                                                               你懂抓昆蟲?  

2013年5月20日 星期一

00360151李飛鴻



將影像並以及兩張圖都分別存入ptr1 ptr2 ptr3
      for (int y=0; y<logoImg->height; y++) { 
      uchar* ptr1=(uchar*) (pImg2->imageData +(y)*pImg2->widthStep);
      uchar* ptr2=(uchar*) (logoImg->imageData + y*logoImg->widthStep);
      uchar* ptr3=(uchar*) (logoImg2->imageData + y*logoImg2->widthStep);

以下這兩個for迴圈則是將左右兩邊固定的圖顯示出來
若該區塊顏色不等於白色則顯示該皇冠應有圖色塊(去背),並且把ptr2 (logoImg)的圖片放在X+20這個位置上
      for (int x=0; x<logoImg->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] ;
      }
      }
若該區塊顏色不等於白色則顯示該皇冠應有圖色塊(去背),並且把ptr3 (logoImg)的圖片放在X+180這個位置上
      for (int x=0; x<logoImg2->width; x++) { 
      if(ptr3[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] ;
      } 
      }
      }
   

以下這段是利用身體的移動去感應左右邊的皇冠

 mouseX<150 表示所感應出來的值若位於整個畫面的0~150
則圖會依照MOUSEX,也就是所感應出來的圖片位置判斷出為logoImg


     //lg 
      for (int y=0; y<logoImg->height; y++) {  
      uchar* ptr1=(uchar*) (pImg2->imageData +(y+mouseY-160)*pImg2->widthStep);
      uchar* ptr2=(uchar*) (logoImg ->imageData + y*logoImg ->widthStep); 
      uchar* ptr3=(uchar*) (logoImg2 ->imageData + y*logoImg ->widthStep); 

      for (int x=0; x<logoImg->width; x++) {     
       if(ptr2[3*x]!=255 && mouseX<150){
       ptr1[3*(x+mouseX-100)]=ptr2[3*(x)] ; 
       ptr1[3*(x+mouseX-100)+1]=ptr2[3*(x)+1] ; 
       ptr1[3*(x+mouseX-100)+2]=ptr2[3*(x)+2] ;}    
       }
       }


 mouseX>170 表示所感應出來的值若位於整個畫面的170以上
則圖會依照MOUSEX,也就是所感應出來的圖片位置判斷出為logoimg2
      //lg2
       for (int y=0; y<logoImg2->height; y++) {  
      uchar* ptr1=(uchar*) (pImg2->imageData +(y+mouseY-160)*pImg2->widthStep);
      uchar* ptr2=(uchar*) (logoImg2->imageData + y*logoImg2->widthStep);

      for (int x=0; x<logoImg2->width; x++) {     
       if(ptr2[3*x]!=255 && mouseX > 170){
       ptr1[3*(x+mouseX-20)]=ptr2[3*(x)] ; 
       ptr1[3*(x+mouseX-20)+1]=ptr2[3*(x)+1] ; 
       ptr1[3*(x+mouseX-20)+2]=ptr2[3*(x)+2] ;}    
       }
       } 
      
   
這次很可惜只有把紅線跟頭上的圖像做出來而已
*無法左半部右半部出現兩張不同圖
*無法左半部右半部固定出現兩張圖
以上是將這個兩部分的步驟加以註解




過程:

這次上機考只有把紅線以及頭上的皇冠顯示出來,後面顯示那兩張固定的圖片,我當初想應該用相框的概念就能把它顯示出來,但打了就是不會顯示,不然就是當掉,後面也先跳過這邊,試試看做左右邊範圍限制的兩個皇冠,也是卡在顯示不出來。後來才發現條件限制的位置放錯了 if(ptr2[3*x]!=255 && mouseX<150)應該要這樣,而圖片顯示也不用跟著MOUSEX走,只要X+多少這樣就可以了,另外空間也都可再重新宣告一次就可以。

心得:

程式沒打出來當下,真的蠻佩服那些成功打出來的人,很多東西真的是看到才知道,看到那些正確的程式碼,也才領悟到,TRACE程式的目的是多麼重要,課後考完也有留在教室詢問同學要如何寫出來,也順便將BLOG上的心得先打個大綱,改天再仔細說明程式。


2013年5月6日 星期一

00360151_李飛鴻_相框+四象限變色









#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];
                           
  /*     if(ptr2[3*(x+x1)]<120 && ptr2[3*(x+x1)+1]<150&& ptr2[3*(x+x1)+2]<100)
    {
     ptr2[3*(x+x1)]=0;
     ptr2[3*(x+x1)+1]=0;
     ptr2[3*(x+x1)+2]=255;
     }
     //黑變紅
   */
       
 
   /*    
   if(ptr2[3*(x+x1)]<120 && ptr2[3*(x+x1)+1]<150&& ptr2[3*(x+x1)+2]<100)
    {
    if (x > frame->width/2 && y < frame->height/2)
     {ptr2[3*(x+x1)]=0;
     ptr2[3*(x+x1)+1]=255;
     ptr2[3*(x+x1)+2]=255;  }
     else if (x < frame->width/2 && y < frame->height/2)
     {ptr2[3*(x+x1)]=0;
     ptr2[3*(x+x1)+1]=0;
     ptr2[3*(x+x1)+2]=255; }
     else if (x < frame->width/2 && y > frame->height/2)
    { ptr2[3*(x+x1)]=0;
     ptr2[3*(x+x1)+1]=255;
     ptr2[3*(x+x1)+2]=255; }
     else if (x > frame->width/2 && y > frame->height/2)
    { ptr2[3*(x+x1)]=0;
     ptr2[3*(x+x1)+1]=0;
     ptr2[3*(x+x1)+2]=255;  }
     //四個象限
     }
   */

 
 
     

   
       }
    }
  }





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

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月22日 星期一

00360151_李飛鴻_自畫像












#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");

}