2013年5月6日 星期一

隱形人



終於做出來了!!!!

隱形人想了一下,但其實跟LOGG的意思差不多!!!!


現在只差要解決光線問題就會完美了~~



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

#define alpha 0.3
#define alpha2 0.9
#define x1 130
#define y1 170
#define x2 0
#define y2 0

#define refBlue 180
#define refGreen 180
#define refRed 127

#define targetBlue 0
#define targetGreen 0
#define targetRed 240

#define TH 70

CvCapture *capture;
IplImage *frame;


int main(int argc, char** argv )
{

IplImage* pImg = NULL;  
IplImage* pImg1 = NULL;
IplImage* pImg2 = NULL;
IplImage* pImg3 = NULL;
IplImage* pImg4 = NULL;
IplImage* logoImg = NULL;
IplImage* logoImg2 = NULL;
IplImage* mergeImg = NULL;
 

//聲明IplImage指針

//創建視窗
capture=cvCreateCameraCapture(0);
cvNamedWindow("Original Image", 1);
cvNamedWindow("UP&DOWN", 1);
cvNamedWindow("RIGHT&LEFT", 1);
cvNamedWindow("LEFT&RIGHT", 1);
cvNamedWindow("HAHA", 1);


while(1)
{
logoImg2=cvLoadImage("123.jpg");
logoImg=cvLoadImage("112233.jpg");
pImg=cvQueryFrame(capture);
pImg1 = cvCreateImage(cvSize(pImg->width,pImg->height), IPL_DEPTH_8U, 3);
pImg2 = cvCreateImage(cvSize(pImg->width,pImg->height), IPL_DEPTH_8U, 3);
pImg3 = cvCreateImage(cvSize(pImg->width,pImg->height), IPL_DEPTH_8U, 3);
pImg4 = cvCreateImage(cvSize(pImg->width,pImg->height), IPL_DEPTH_8U, 3);
mergeImg = cvCreateImage(cvSize(pImg->width,pImg->height), IPL_DEPTH_8U,3);
pImg1=cvCloneImage(pImg);
pImg2=cvCloneImage(pImg);
pImg3=cvCloneImage(pImg);
pImg4=cvCloneImage(pImg);



 
 for (int y=0; y<pImg1->height; y++) {
  uchar* ptr1=(uchar*) (pImg1->imageData +y*pImg1->widthStep);
  for (int x=0; x<pImg1->width; x++) {    
     int D= (ptr1[3*x] - refBlue) *  (ptr1[3*x] - refBlue) +
            (ptr1[3*x+1] - refGreen) * (ptr1[3*x+1] -refGreen) +
            (ptr1[3*x+2] - refRed) * (ptr1[3*x+2] - refRed);
    //printf("%d %d %d %.2f\n",ptr1[3*x],ptr1[3*x+1],ptr1[3*x+2], sqrt(D));  
       
     if (sqrt(D) < TH && y < pImg2->height/2) {
         ptr1[3*x]=targetBlue;
         ptr1[3*x+1]=targetGreen;
         ptr1[3*x+2]=targetRed;              
         }
     if (sqrt(D) < TH && y > pImg2->height/2) {
         ptr1[3*x]=0;
         ptr1[3*x+1]=255;
         ptr1[3*x+2]=255;              
         }
     }
}

 for (int y=0; y<pImg2->height; y++) {
  uchar* ptr1=(uchar*) (pImg2->imageData +y*pImg2->widthStep);
  for (int x=0; x<pImg2->width; x++) {    
     int D= (ptr1[3*x] - refBlue) *  (ptr1[3*x] - refBlue) +
            (ptr1[3*x+1] - refGreen) * (ptr1[3*x+1] -refGreen) +
            (ptr1[3*x+2] - refRed) * (ptr1[3*x+2] - refRed);
    //printf("%d %d %d %.2f\n",ptr1[3*x],ptr1[3*x+1],ptr1[3*x+2], sqrt(D));  
       
     if (sqrt(D) < TH& x < pImg2->width/2) {
         ptr1[3*x]=0;
         ptr1[3*x+1]=0;
         ptr1[3*x+2]=255;              
         }
     if (sqrt(D) < TH && x > pImg2->width/2) {
         ptr1[3*x]=0;
         ptr1[3*x+1]=255;
         ptr1[3*x+2]=255;              
         }
     }
}
 for (int y=0; y<pImg3->height; y++) {
  uchar* ptr1=(uchar*) (pImg3->imageData +y*pImg3->widthStep);
  for (int x=0; x<pImg3->width; x++) {    
     int D= (ptr1[3*x] - refBlue) *  (ptr1[3*x] - refBlue) +
            (ptr1[3*x+1] - refGreen) * (ptr1[3*x+1] -refGreen) +
            (ptr1[3*x+2] - refRed) * (ptr1[3*x+2] - refRed);
    //printf("%d %d %d %.2f\n",ptr1[3*x],ptr1[3*x+1],ptr1[3*x+2], sqrt(D));  
       
     if (sqrt(D) < TH && x > pImg1->width/2) {
         ptr1[3*x]=0;
         ptr1[3*x+1]=0;
         ptr1[3*x+2]=255;              
         }
     if (sqrt(D) < TH && x < pImg1->width/2) {
         ptr1[3*x]=targetBlue;
         ptr1[3*x+1]=255;
         ptr1[3*x+2]=255;              
         }
     }
}

mergeImg=cvCloneImage(logoImg);
for (int y=0; y<pImg4->height; y++) {
  uchar* ptr1=(uchar*) (pImg4->imageData +y*pImg4->widthStep);
  uchar* ptr2=(uchar*) (logoImg->imageData +y*logoImg->widthStep);  
  for (int x=0; x<pImg4->width; x++) {    
     int D= (ptr1[3*x] - refBlue) *  (ptr1[3*x] - refBlue) +
            (ptr1[3*x+1] - refGreen) * (ptr1[3*x+1] -refGreen) +
            (ptr1[3*x+2] - refRed) * (ptr1[3*x+2] - refRed);
    //printf("%d %d %d %.2f\n",ptr1[3*x],ptr1[3*x+1],ptr1[3*x+2], sqrt(D));  
       
     if (sqrt(D) < 70 ) {
         ptr1[3*x]=ptr2[3*x];
         ptr1[3*x+1]=ptr2[3*x+1];
         ptr1[3*x+2]=ptr2[3*x+2]; }
         }
     }
       

/*if (x < frame->width/2 ) …
if (x > frame->width/2 ) …
if (y < frame->height/2) …
if (y > frame->height/2) …

  */
 
 
  /*
  mergeImg=cvCloneImage(pImg);
  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)] >230 && ptr1[3*(x)+1] >230 && ptr1[3*(x)+2] >230 ){
       ptr1[3*(x)]=ptr2[3*(x+x2)] ;
       ptr1[3*(x)+1]=ptr2[3*(x+x2)+1] ;
       ptr1[3*(x)+2]=ptr2[3*(x+x2)+2] ;
               }
       }
    }  

*/







//顯示圖像
cvShowImage( "Original Image", pImg );
cvShowImage( "UP&DOWN", pImg1 );
cvShowImage( "RIGHT&LEFT", pImg2 );
cvShowImage( "LEFT&RIGHT", pImg3 );
cvShowImage( "HAHA", pImg4 );


cvWaitKey(10); //等待按鍵

//銷毀視窗


}
cvReleaseImage( &pImg );
cvReleaseImage( &pImg1 );
cvReleaseImage( &pImg2 );
cvReleaseImage( &pImg3 );
cvReleaseImage( &pImg4 );
//cvReleaseImage( &mergeImg );

cvDestroyWindow( "Original Image" );
cvDestroyWindow( "UP&DOWN" );
cvDestroyWindow( "RIGHT&LEFT" );
cvDestroyWindow( "LEFT&RIGHT" );
cvDestroyWindow( "HAHA" );
//cvDestroyWindow( "Image with Logo" );






}

沒有留言:

張貼留言