2013年5月13日 星期一

皮膚偵測


今天的作業是皮膚偵測~~


做了鋼鐵人面具  超酷的!!!

-------------------------------------
#include <stdio.h>
#include <cv.h>
#include <highgui.h>
#include "cxcore.h"

#define refBlue 168
#define refGreen 182
#define refRed 205

CvCapture *capture;

int main(){
    IplImage* pImg = NULL;
    IplImage* pImg2 = NULL;    
    IplImage* pImg1 = NULL;
    IplImage* logoImg= NULL;
    int mouseX=0;
    int mouseY=0;
    CvPoint P1,P2,P3,P4;
    CvScalar Color;
    logoImg=cvLoadImage("12311.png");
    
    capture=cvCreateCameraCapture(0);
    cvNamedWindow("Original Image", 1);
    cvNamedWindow("123", 1);
    
    while(true){
    
    pImg=cvQueryFrame(capture);
    pImg1 = cvCreateImage(cvSize(pImg->width,pImg->height), IPL_DEPTH_8U, 1);
    pImg2 = cvCreateImage(cvSize(pImg->width,pImg->height), IPL_DEPTH_8U, 3);
    
    
    cvCvtColor(pImg, pImg, CV_BGR2YCrCb);
    cvInRangeS(pImg, cvScalar(0,137,77), cvScalar(256,177,127),pImg1);
    pImg=cvQueryFrame(capture);
    pImg2=cvCloneImage(pImg);
    

    int redPixelNumber=0;
    int redPixelX=0;
    int redPixelY=0;

    for (int y=0; y<pImg1->height; y++) { 
    uchar* ptr1=(uchar*) (pImg1->imageData +y*pImg1->widthStep);
    for (int x=0; x<pImg1->width; x++) {    
       if(ptr1[x]==255){       
       redPixelNumber++;
       redPixelX+=x;
       redPixelY+=y;}
     }
     }

     if (redPixelNumber>0) {
      mouseX=redPixelX/redPixelNumber;
      mouseY=redPixelY/redPixelNumber;
      }
      
      P1 = cvPoint(mouseX-10,mouseY);                                    
      P2 = cvPoint(mouseX+10,mouseY);
      P3 = cvPoint(mouseX,mouseY-10);                                     
      P4 = cvPoint(mouseX,mouseY+10);                                     
      Color=CV_RGB(255,0,0); 
      //cvLine(pImg2,P1,P2,Color,2,8,0);
      //cvLine(pImg2,P3,P4,Color,2,8,0); 
      
      
      for (int y=0; y<logoImg->height; y++) {  
      uchar* ptr1=(uchar*) (pImg2->imageData +(y+mouseY-110)*pImg2->widthStep);
      uchar* ptr2=(uchar*) (logoImg->imageData + y*logoImg->widthStep); 
      for (int x=0; x<logoImg->width; x++) {     
       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] ;}    
       }
    
}
      

 cvShowImage( "Original Image", pImg2 );
 cvShowImage( "123", pImg1 );
 cvReleaseImage( &pImg2 );

 cvWaitKey(10);
   
}

   
   
   }

沒有留言:

張貼留言