2013年6月9日 星期日

99361121_黃彥豪_上機考心得


題目:在左右視窗分別戴上不同的皇冠
1.先把視窗分邊
cvLine(src,cvPoint(325,0),cvPoint(325,500),CV_RGB(255,0,0),3,8,0);
ps:使用的是筆電視訊鏡頭
2.讀取圖片 偵測皮膚
logoImg1=cvLoadImage("p1.jpg");
 logoImg2=cvLoadImage("p2.jpg");
if (blackPixelNumber > 0) {
           mouseX=blackPixelX/blackPixelNumber;
           mouseY=blackPixelY/blackPixelNumber;
        }
將上面兩張圖片帶入視訊
mergeImg=cvCloneImage(src);
for (int y=0; y<logoImg1->height; y++) {  
            uchar* ptr1=(uchar*) (logoImg1->imageData +y*logoImg1->widthStep);
            uchar* ptr2=(uchar*) (mergeImg->imageData +(y+y1)*mergeImg->widthStep); 
        for (int x=0; x<logoImg1->width; x++) {
            if(ptr1[3*(x)] < 210 && ptr1[3*(x+1)] < 210 && ptr1[3*(x+2)] < 210){     
            ptr2[3*(x+x1)]=ptr1[3*(x)] ; 
            ptr2[3*(x+x1)+1]=ptr1[3*(x)+1] ; 
            ptr2[3*(x+x1)+2]=ptr1[3*(x)+2] ;           
            }    
            }
          }    
        
        for (int y=0; y<logoImg2->height; y++) {  
            uchar* ptr1=(uchar*) (logoImg2->imageData +y*logoImg2->widthStep);
            uchar* ptr2=(uchar*) (mergeImg->imageData +(y+y2)*mergeImg->widthStep); 
        for (int x=0; x<logoImg2->width; x++) {
            if(ptr1[3*(x)] < 239 && ptr1[3*(x+1)] < 239 && ptr1[3*(x+2)] < 239){          
            ptr2[3*(x+x2)]=ptr1[3*(x)] ; 
            ptr2[3*(x+x2)+1]=ptr1[3*(x)+1] ; 
            ptr2[3*(x+x2)+2]=ptr1[3*(x)+2] ;           
            }    
            }
          }
      
下面兩張帶入圖片
for (int y=0; y<logoImg1->height; y++) {  
            uchar* ptr1=(uchar*) (logoImg1->imageData +y*logoImg1->widthStep);
            uchar* ptr2=(uchar*) (mergeImg->imageData +(y+mouseY-110)*mergeImg->widthStep); 
        for (int x=0; x<logoImg1->width; x++) {
            if(mouseX<=155)
            if(ptr1[3*(x)] < 210 && ptr1[3*(x+1)] < 210 && ptr1[3*(x+2)] < 210){     
              ptr2[3*(x+mouseX-50)]=ptr1[3*(x)]; 
              ptr2[3*(x+mouseX-50)+1]=ptr1[3*(x)+1]; 
              ptr2[3*(x+mouseX-50)+2]=ptr1[3*(x)+2];
            }    
          }
        }
        
        for (int y=0; y<logoImg2->height; y++) {  
            uchar* ptr1=(uchar*) (logoImg2->imageData +y*logoImg2->widthStep);
            uchar* ptr2=(uchar*) (mergeImg->imageData +(y+mouseY-110)*mergeImg->widthStep); 
        for (int x=0; x<logoImg2->width; x++) {
             if(mouseX>=165)
              if(ptr1[3*(x)] < 239 && ptr1[3*(x+1)] < 239 && ptr1[3*(x+2)] < 239){     
              ptr2[3*(x+mouseX-50)]=ptr1[3*(x)]; 
              ptr2[3*(x+mouseX-50)+1]=ptr1[3*(x)+1]; 
              ptr2[3*(x+mouseX-50)+2]=ptr1[3*(x)+2];
              }    
          }    
          }


心得:一開始看到題目時,心裡大概有想法,
把線分開後,如何將皇冠放進去並且使其跟
隨我們擺動便使我困惑許久,在考試後問了許多同學,
也搞懂了並順利完成這個作業。

沒有留言:

張貼留言